¡¶JAVAÓëģʽ¡·µÚ23Ìì¨D״̬ģʽ (¶þ)

2014-11-24 08:31:45 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 1
/
public class Client {

public static void main(String[] args) {
// ´´½¨×´Ì¬
State state = new ConcreteStateB();
// ´´½¨»·¾³
Context context = new Context();
// ½«×´Ì¬ÉèÖõ½»·¾³ÖÐ
context.setState(state);
// ÇëÇó
context.request("test");
}
}

¡¡¡¡´ÓÉÏÃæ¿ÉÒÔ¿´³ö£¬»·¾³ÀàContextµÄÐÐΪrequest()ÊÇίÅɸøÄ³Ò»¸ö¾ßÌå״̬ÀàµÄ¡£Í¨¹ýʹÓöà̬ÐÔÔ­Ôò£¬¿ÉÒÔ¶¯Ì¬¸Ä±ä»·¾³ÀàContextµÄÊôÐÔStateµÄÄÚÈÝ£¬Ê¹Æä´ÓÖ¸ÏòÒ»¸ö¾ßÌå״̬Àà±ä»»µ½Ö¸ÏòÁíÒ»¸ö¾ßÌå״̬À࣬´Ó¶øÊ¹»·¾³ÀàµÄÐÐΪrequest()Óɲ»Í¬µÄ¾ßÌå״̬ÀàÀ´Ö´ÐС£

ʹÓó¡¾°
¡¡¡¡¿¼ÂÇÒ»¸öÔÚÏßͶƱϵͳµÄÓ¦Óã¬ÒªÊµÏÖ¿ØÖÆÍ¬Ò»¸öÓû§Ö»ÄÜͶһƱ£¬Èç¹ûÒ»¸öÓû§·´¸´Í¶Æ±£¬¶øÇÒͶƱ´ÎÊý³¬¹ý5´Î£¬ÔòÅж¨Îª¶ñÒâˢƱ£¬ÒªÈ¡Ïû¸ÃÓû§Í¶Æ±µÄ×ʸñ£¬µ±È»Í¬Ê±Ò²ÒªÈ¡ÏûËûËùͶµÄƱ£»Èç¹ûÒ»¸öÓû§µÄͶƱ´ÎÊý³¬¹ý8´Î£¬½«½øÈëºÚÃûµ¥£¬½ûÖ¹ÔٵǼºÍʹÓÃϵͳ¡£

¡¡¡¡ÒªÊ¹ÓÃ״̬ģʽʵÏÖ£¬Ê×ÏÈÐèÒª°ÑͶƱ¹ý³ÌµÄ¸÷ÖÖ״̬¶¨Òå³öÀ´£¬¸ù¾ÝÒÔÉÏÃèÊö´óÖ·ÖΪËÄÖÖ״̬£ºÕý³£Í¶Æ±¡¢·´¸´Í¶Æ±¡¢¶ñÒâˢƱ¡¢½øÈëºÚÃûµ¥¡£È»ºó´´½¨Ò»¸öͶƱ¹ÜÀí¶ÔÏó£¨Ï൱ÓÚContext£©¡£

¡¡¡¡ÏµÍ³µÄ½á¹¹Í¼ÈçÏÂËùʾ£º

\

¡¡¡¡Ô´´úÂë
¡¡¡¡³éÏó״̬Àà

[java]
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:39:41
*
* @Àà˵Ã÷ £º
*/
public interface VoteState {
/**
* ´¦Àí״̬¶ÔÓ¦µÄÐÐΪ
*
* @param user
* ͶƱÈË
* @param voteItem
* ͶƱÏî
* @param voteManager
* ͶƱÉÏÏÂÎÄ£¬ÓÃÀ´ÔÚʵÏÖ״̬¶ÔÓ¦µÄ¹¦ÄÜ´¦ÀíµÄʱºò£¬ ¿ÉÒԻص÷ÉÏÏÂÎĵÄÊý¾Ý
*/
public void vote(String user, String voteItem, VoteManager voteManager);
}
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:39:41
*
* @Àà˵Ã÷ £º
*/
public interface VoteState {
/**
* ´¦Àí״̬¶ÔÓ¦µÄÐÐΪ
*
* @param user
* ͶƱÈË
* @param voteItem
* ͶƱÏî
* @param voteManager
* ͶƱÉÏÏÂÎÄ£¬ÓÃÀ´ÔÚʵÏÖ״̬¶ÔÓ¦µÄ¹¦ÄÜ´¦ÀíµÄʱºò£¬ ¿ÉÒԻص÷ÉÏÏÂÎĵÄÊý¾Ý
*/
public void vote(String user, String voteItem, VoteManager voteManager);
}

¡¡¡¡¾ßÌå״̬Àࡪ¡ªÕý³£Í¶Æ±

[java]
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:40:00
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àࡪ¡ªÕý³£Í¶Æ±
*/
public class NormalVoteState implements VoteState {

@Override
public void vote(String user, String voteItem, VoteManager voteManager) {
// Õý³£Í¶Æ±£¬¼Ç¼µ½Í¶Æ±¼Ç¼ÖÐ
voteManager.getMapVote().put(user, voteItem);
System.out.println("¹§Ï²Í¶Æ±³É¹¦");
}

}
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:40:00
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àࡪ¡ªÕý³£Í¶Æ±
*/
public class NormalVoteState implements VoteState {

@Override
public void vote(String user, String voteItem, VoteManager voteManager) {
// Õý³£Í¶Æ±£¬¼Ç¼µ½Í¶Æ±¼Ç¼ÖÐ
voteManager.getMapVote().put(user, voteItem);
System.out.println("¹§Ï²Í¶Æ±³É¹¦");
}

}

¡¡¡¡¾ßÌå״̬Àࡪ¡ªÖظ´Í¶Æ±

[java]
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:40:23
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àࡪ¡ªÖظ´Í¶Æ±
*/
public class RepeatVoteState implements VoteState {

@Override
public void vote(String user, String voteItem, VoteManager voteManager) {
// ÖØ¸´Í¶Æ±£¬ÔÝʱ²»×ö´¦Àí
System.out.println("Çë²»ÒªÖØ¸´Í¶Æ±");
}

}
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:40:23
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àࡪ¡ªÖظ´Í¶Æ±
*/
public class RepeatVoteState implements VoteState {

@Override
public void vote(String user, String voteItem, VoteManager voteManager) {
// ÖØ¸´Í¶Æ±£¬ÔÝʱ²»×ö´¦Àí
System.out.println("Çë²»ÒªÖØ¸´Í¶Æ±");
}

}

¡¡¡¡¾ßÌå״̬Àࡪ¡ª¶ñÒâˢƱ

[java]
package com.bankht.State.Vote;

/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:40:50
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àࡪ¡ª¶ñÒâˢƱ
*/
public class SpiteVoteState implements VoteState {

@Override
public void vote(String user, String voteItem, VoteManager voteManager) {
// ¶ñÒâͶƱ£¬È¡ÏûÓû§µÄͶƱ×ʸñ£¬²¢È¡ÏûͶƱ¼Ç¼
String str = voteManager.getMapVote().get(user);
if (str != null) {
voteManager.getMapVote().remove(user);