GOF֮״̬ģʽ

¤… ÄäÃû¼¼ÊõÓû§   ¤b 2020-12-22 06:02   ¤z 58   ¤k 0

״̬ģʽ£¨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());

}

}

·ÖÏíµ½ :
0 ÈËÊÕ²Ø
ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ»ØÌû µÇ¼ | Á¢¼´×¢²á

±¾°æ»ý·Ö¹æÔò

»ý·Ö:7942463
Ìû×Ó:1588486
¾«»ª:0
ÆÚȨÂÛ̳ ÆÚȨÂÛ̳
·¢²¼
ÄÚÈÝ

ÏÂÔØÆÚȨÂÛ̳ÊÖ»úAPP