ÕýÔÚÔĶÁ£º×´Ì¬Ä£Ê½Ö®ÐǼÊÓ¦ÓÃ״̬ģʽ֮ÐǼÊÓ¦ÓÃ

2004-02-17 10:08 ³ö´¦£ºCSDN ×÷Õߣºasklxf ÔðÈα༭£ºlinjixiong

Ò»¸ö¶ÔÏóÓжàÖÖ״̬£¬ÔÚ²»Í¬µÄ״̬Ï£¬Í¬Ò»ÖÖ·½·¨Óв»Í¬µÄÐÐΪ¡£Èç¹ûÓÃswich-caseÓï¾ä£¬½«ÓдóÁ¿µÄÌõ¼þ·ÖÖ§ºÍÂß¼­´úÂë»ìÔÚÒ»Æð¡£×´Ì¬Ä£Ê½½«Ã¿¸ö״̬·â×°µ½Ò»¸ö¶ÀÁ¢µÄÀàÖУ¬ÀûÓöà̬ÐÔʹµÃ²»Í¬×´Ì¬ÏÂͬһÖÖ·½·¨±íÏÖ²»Í¬µÄÐÐΪ¡£

״̬ģʽµÄUMLͼÈçÏ£º

ÐǼÊÖÐÈË×åµÄ»úǹ±øMarineÓÐÁ½ÖÖ״̬£ºÆÕͨ״̬ºÍ´òÁËÐË·ÜÕëºóµÄ״̬£¬Á½ÖÖ״̬Ï»úǹ±øµÄ¿ªÇ¹ÆµÂÊÊDz»Í¬µÄ£¬ÎÒÃÇÓÃ״̬ģʽÀ´ÊµÏÖ»úǹ±øµÄfire()·½·¨¡£

 

Ê×Ïȶ¨Òå³éÏó״̬State½Ó¿Ú£¬Õâ¸ö½Ó¿ÚÖ¸¶¨ÁË»úǹ±øµÄfireÐÐΪ£º

public interface State {
    public void fire();
}

State½Ó¿ÚÓÐÒ»¸öfire()·½·¨£¬ÎÒÃÇʵÏÖÁ½¸ö×ÓÀàNormalStateºÍExcitedState£¬·Ö±ð±íʾÆÕͨ״̬ºÍ´òÁËÐË·ÜÕëºóµÄ״̬£¬²¢ÊµÏÖ¾ßÌåµÄfire·½·¨£º

public class NormalState implements State {
    public void fire() {
       System.out.println("ÆÕͨ״̬ÿÃ뿪ǹ1´Î¡£");
    }
}
public class ExcitedState implements State {
    public void fire() {
       System.out.println("ÐË·Ü״̬ÿÃ뿪ǹ2´Î¡£");
    }
}
 
×÷Õß±ÊÃû¼ò¶ÌÄÚÈÝ ·¢±íʱ¼ä
:



×îºó£¬¶¨Òå»úǹ±øÀàMarine£¬Ã¿¸öMarineµÄʵÀý´ú±íÒ»¸ö»úǹ±ø£º

public class Marine {
    // ±£³ÖÒ»¸ö״̬ÀàµÄʵÀý£º
    private State state = new NormalState();
 
    // Ϊ»úǹ±øÉèÖÃ״̬£º
    public void setState(State state) {
       this.state = state;
    }
 
    // fire()·½·¨£¬Êµ¼Êµ÷ÓõÄÊÇstate±äÁ¿µÄfire()·½·¨£º
    public void fire() {
       state.fire();
    }
}

×îºóÎÒÃÇ¿´¿´ÈçºÎÔÚ¿Í»§¶Ë¿ØÖÆÒ»¸ö»úǹ±øµÄ״̬£º

public static void main(String[] args) {
    // ´´½¨Ò»¸ö»úǹ±øµÄʵÀý£º
    Marine marine = new Marine();
    // µ÷ÓÃfire()·½·¨£º
    marine.fire();
    // ÉèÖÃΪÐË·Ü״̬£º
    marine.setState(new ExcitedState());
    // ÔÙµ÷ÓÃfire()·½·¨£º
    marine.fire();
}

¶Ôͬһ¸öMarine¶ÔÏóµ÷ÓÃÁ½´Îfire()·½·¨£¬ÆÁÄ»Êä³öΪ£º

ÆÕͨ״̬ÿÃ뿪ǹ1´Î¡£
ÐË·Ü״̬ÿÃ뿪ǹ2´Î¡£

¿É¼û»úǹ±øÔÚÁ½ÖÖ״̬ϵÄͬһ¸öfire()·½·¨Óв»Í¬µÄÐÐΪ¡£

ʹÓÃ״̬ģʽµÄºÃ´¦ÊÇÿ¸ö״̬±»·â×°µ½Ò»¸ö¶ÀÁ¢µÄÀàÖУ¬ÕâЩÀà¿ÉÒÔ¶ÀÁ¢±ä»¯£¬¶øÖ÷¶ÔÏóÖÐûÓз±ËöµÄswich-caseÓï¾ä£¬²¢ÇÒÌí¼ÓеÄ״̬·Ç³£ÈÝÒ×£¬Ö»ÐèÒª´ÓStateÅÉÉúÒ»¸öÐÂÀ༴¿É¡£

 

 

²ì¿´ÆÀÂÛÏêϸÄÚÈÝ ÎÒÒª·¢±íÆÀÂÛ
×÷Õß±ÊÃû¼ò¶ÌÄÚÈÝ ·¢±íʱ¼ä
:

¹Ø×¢ÎÒÃÇ

×îÐÂ×ÊѶÀëÏßËæʱ¿´ ÁÄÌìͲÛÓ®½±Æ·