|
״̬ģʽ£¨State pattern)
ʲôÊÇ×´Ì¬Ä£Ê½ÄØ£¿ËùνµÄ״̬ģʽ£¬Ö¸µÄÊǶÔÓÚͬһ¸ö¶ÔÏó¶øÑÔ£¬²»Í¬µÄ״̬¶ÔÓ¦×Å
²»Í¬µÄÐÐΪ£¬Í¬Ê±£¬ÕâЩ״̬ºÍÐÐΪ֮¼äÊÇ¿ÉÒÔת»¯µÄ£¬ÓÉÒ»¸ö״̬תÏòÁíÍâµÄÒ»¸ö״̬¡£ÆäʵÕâÑùµÄÀý×ÓÉú»îÖÐÊǺܶàµÄ¡£

×î³£¼ûµÄÓ¦¸ÃÊǺìÂ̵ÆÁË¡£Ò»¹²ÓÐÈý¸ö״̬¡£ÆäÖУ¬ºìµÆ±íʾµÄÊDz»¿ÉÒÔͨ¹ý£¬»ÆµÆ±íʾµÄÊǾ¯¸æ£¬Â̵ƱíʾµÄÊÇ¿ÉÒÔͨÐС£ÕâÊÇÊÇͬһ¸ö¶ÔÏó¶ÔÓ¦×Ų»Í¬µÄ״̬£¬²»Í¬µÄ״̬ÓÖ±íʾµÄÊDz»Í¬µÄÐÐΪ¡£
ÔÙ±ÈÈçÎÒÃǵķ¿¼äµÄÔ¤¶©¡£·¿¼äµÄ״̬ҲÓÐÈý¸ö¡£¿ÕÏУ¬Ô¤¶©£¬ÒÑÈëסÈý¸ö״̬¡£Õ⼸¸ö״̬֮¼äÊÇ¿ÉÒÔÏ໥ת»¯µÄ¡£¾Í±ÈÈçÏÂÃæµÄͼËùʾ£º

µ±È»ÎÒÃÇÊ×ÏÈÏëµ½µÄÓ¦¸ÃÊÇʹÓÃif ,else if ,else.µ«ÊÇÕâÖÖ°ì·¨Ã÷ÏÔÊDz»¹»ºÃµÄ¡£

ËùÒÔµ±ÎÒÃÇÓöµ½ÕâÖÖÐèҪƵ·±Ð޸ĶÔÏóµÄ״̬µÄʱºò£¬ÄÇôÎÒÃǾͿÉÒÔ¿¼ÂÇʹÓÃ״̬ģʽÁË¡£
ÄÇôʲôÊÇ×´Ì¬Ä£Ê½ÄØ£¿

Ê×ÏÈ£¬ÎÒÃÇÐèÒª¶¨ÒåµÄÊÇÒ»¸ö³éÏóµÄ״̬ÀàState.¶øStateÓÖÓм¸¸öʵÏÖÁËËüµÄ½Ó¿ÚµÄ³éÏóÀà¡£²¢ÇÒÌØ±ðÐèҪעÒâµÄÊÇ£¬ContextÀàÖÐÓµÓÐStateÀàµÄÒ»¸öÒýÓá£ËùÒÔ˵£¬Õâ¸öContextÀàµÄ×÷ÓÃÊǶ¨ÒåÁ˵±Ç°µÄ״̬¡£ÕâÊÇҪעÒâµÄ¡£
ÄÇô¾ßÌåÀ´Ëµ£¬ÎÒÃÇÈçºÎÀ´ÊµÏÖÄØ£¿
package com.bjsxt.state;
public interface State {
void handle();
}
package com.bjsxt.state;
/**
* ¿ÕÏÐ״̬
* @author Administrator
*
*/
public class FreeState implements State {
@Override
public void handle() {
System.out.println("·¿¼ä¿ÕÏУ¡£¡£¡Ã»ÈËס£¡");
}
}
package com.bjsxt.state;
/**
* ÒÑÔ¤¶©×´Ì¬
* @author Administrator
*
*/
public class BookedState implements State {
@Override
public void handle() {
System.out.println("·¿¼äÒÑÔ¤¶©£¡±ðÈ˲»Äܶ¨£¡");
}
}
package com.bjsxt.state;
/**
* ÒÑÈëס״̬
* @author Administrator
*
*/
public class CheckedInState implements State {
@Override
public void handle() {
System.out.println("·¿¼äÒÑÈëס£¡ÇëÎð´òÈÅ£¡");
}
}
package com.bjsxt.state;
/**
* ·¿¼ä¶ÔÏó
* @author Administrator
*
*/
//ÆäʵÕâ¸öÀà±íʾµÄÓ¦¸ÃÊÇÒ»¸ö·¿¼äÀà¡£
public class HomeContext {
//Èç¹ûÊÇÒøÐÐϵͳ£¬Õâ¸öContextÀà¾ÍÊÇÕ˺š£¸ù¾Ý½ð¶î²»Í¬£¬Çл»²»Í¬µÄ״̬£¡
//±ÈÈç˵ÊÇʲô°×½ð״̬,VIP״̬µÈ¡£
private State state;
public void setState(State s){
System.out.println("ÐÞ¸Ä״̬£¡");
state = s;
state.handle();
}
}
package com.bjsxt.state;
public class Client {
public static void main(String[] args) {
HomeContext ctx = new HomeContext();
ctx.setState(new FreeState());
ctx.setState(new BookedState());
}
}

|