״̬ģʽ£¬ÓÖ³Æ×´Ì¬¶ÔÏóģʽ£¨Pattern of Objects for States£©£¬×´Ì¬Ä£Ê½ÊǶÔÏóµÄÐÐΪģʽ¡£
¡¡¡¡×´Ì¬Ä£Ê½ÔÊÐíÒ»¸ö¶ÔÏóÔÚÆäÄÚ²¿×´Ì¬¸Ä±äµÄʱºò¸Ä±äÆäÐÐΪ¡£Õâ¸ö¶ÔÏó¿´ÉÏÈ¥¾ÍÏñÊǸıäÁËËüµÄÀàÒ»Ñù¡£
״̬ģʽµÄ½á¹¹
¡¡¡¡ÓÃÒ»¾ä»°À´±íÊö£¬×´Ì¬Ä£Ê½°ÑËùÑо¿µÄ¶ÔÏóµÄÐÐΪ°ü×°ÔÚ²»Í¬µÄ״̬¶ÔÏóÀÿһ¸ö״̬¶ÔÏó¶¼ÊôÓÚÒ»¸ö³éÏó״̬ÀàµÄÒ»¸ö×ÓÀࡣ״̬ģʽµÄÒâͼÊÇÈÃÒ»¸ö¶ÔÏóÔÚÆäÄÚ²¿×´Ì¬¸Ä±äµÄʱºò£¬ÆäÐÐÎªÒ²ËæÖ®¸Ä±ä¡£×´Ì¬Ä£Ê½µÄʾÒâÐÔÀàͼÈçÏÂËùʾ£º

¡¡¡¡×´Ì¬Ä£Ê½ËùÉæ¼°µ½µÄ½ÇÉ«ÓУº
¡¡¡¡¡ñ¡¡¡¡»·¾³(Context)½ÇÉ«£¬Ò²³ÉÉÏÏÂÎÄ£º¶¨Òå¿Í»§¶ËËù¸ÐÐËȤµÄ½Ó¿Ú£¬²¢ÇÒ±£ÁôÒ»¸ö¾ßÌå״̬ÀàµÄʵÀý¡£Õâ¸ö¾ßÌå״̬ÀàµÄʵÀý¸ø³ö´Ë»·¾³¶ÔÏóµÄÏÖÓÐ״̬¡£
¡¡¡¡¡ñ¡¡¡¡³éÏó״̬(State)½ÇÉ«£º¶¨ÒåÒ»¸ö½Ó¿Ú£¬ÓÃÒÔ·â×°»·¾³£¨Context£©¶ÔÏóµÄÒ»¸öÌØ¶¨µÄ״̬Ëù¶ÔÓ¦µÄÐÐΪ¡£
¡¡¡¡¡ñ¡¡¡¡¾ßÌå״̬(ConcreteState)½ÇÉ«£ºÃ¿Ò»¸ö¾ßÌå״̬À඼ʵÏÖÁË»·¾³£¨Context£©µÄÒ»¸ö״̬Ëù¶ÔÓ¦µÄÐÐΪ¡£
¡¡¡¡Ô´´úÂë
¡¡¡¡»·¾³½ÇÉ«Àà
[java]
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:34:57
*
* @Àà˵Ã÷ £º»·¾³½ÇÉ«Àà
*/
public class Context {
// ³ÖÓÐÒ»¸öStateÀàÐ͵ĶÔÏóʵÀý
private State state;
public void setState(State state) {
this.state = state;
}
/**
* Óû§¸ÐÐËȤµÄ½Ó¿Ú·½·¨
*/
public void request(String sampleParameter) {
// תµ÷stateÀ´´¦Àí
state.handle(sampleParameter);
}
}
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:34:57
*
* @Àà˵Ã÷ £º»·¾³½ÇÉ«Àà
*/
public class Context {
// ³ÖÓÐÒ»¸öStateÀàÐ͵ĶÔÏóʵÀý
private State state;
public void setState(State state) {
this.state = state;
}
/**
* Óû§¸ÐÐËȤµÄ½Ó¿Ú·½·¨
*/
public void request(String sampleParameter) {
// תµ÷stateÀ´´¦Àí
state.handle(sampleParameter);
}
}
¡¡¡¡³éÏó״̬Àà
[java]
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:35:29
*
* @Àà˵Ã÷ £º³éÏó״̬Àà
*/
public interface State {
/**
* ״̬¶ÔÓ¦µÄ´¦Àí
*/
public void handle(String sampleParameter);
}
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:35:29
*
* @Àà˵Ã÷ £º³éÏó״̬Àà
*/
public interface State {
/**
* ״̬¶ÔÓ¦µÄ´¦Àí
*/
public void handle(String sampleParameter);
}
¡¡¡¡¾ßÌå״̬Àà
[java]
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:35:52
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àà
*/
public class ConcreteStateA implements State {
@Override
public void handle(String sampleParameter) {
System.out.println("ConcreteStateA handle £º" + sampleParameter);
}
}
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:35:52
*
* @Àà˵Ã÷ £º¾ßÌå״̬Àà
*/
public class ConcreteStateA implements State {
@Override
public void handle(String sampleParameter) {
System.out.println("ConcreteStateA handle £º" + sampleParameter);
}
}
[java]
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:36:15
*
* @Àà˵Ã÷ £º
*/
public class ConcreteStateB implements State {
@Override
public void handle(String sampleParameter) {
System.out.println("ConcreteStateB handle £º" + sampleParameter);
}
}
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:36:15
*
* @Àà˵Ã÷ £º
*/
public class ConcreteStateB implements State {
@Override
public void handle(String sampleParameter) {
System.out.println("ConcreteStateB handle £º" + sampleParameter);
}
}
¡¡¡¡¿Í»§¶ËÀà
[java]
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:36:33
*
* @Àà˵Ã÷ £º
*/
public class Client {
public static void main(String[] args) {
// ´´½¨×´Ì¬
State state = new ConcreteStateB();
// ´´½¨»·¾³
Context context = new Context();
// ½«×´Ì¬ÉèÖõ½»·¾³ÖÐ
context.setState(state);
// ÇëÇó
context.request("test");
}
}
package com.bankht.State;
/**
* @author: ÌØÖÖ±ø¡ªAK47
* @´´½¨Ê±¼ä£º2012-7-3 ÉÏÎç09:36:33
*
* @Àà˵Ã÷ £º
*