ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Behavioralģʽ֮Stateģʽ
2015-11-21 00:58:45 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:1´Î
Tags£ºBehavioral ģʽ State

1.Òâͼ

ÔÊÐíÒ»¸ö¶ÔÏóÔÙÆäÄÚ²¿×´Ì¬¸Ä±äʱ£¬¸Ä±äËüµÄÐÐΪ¡£¶ÔÏó¿´ÆðÀ´ËƺõÐÞ¸ÄÁËËüµÄÀà¡£

2.±ðÃû

״̬¶ÔÏó£¨Objects for States)

3.¶¯»ú

¿¼ÂÇÒ»¸ö±íÊ¾ÍøÂçÁ¬½ÓµÄÀàTCPConnection¡£Ò»¸öTCPConnection¶ÔÏóµÄ״̬´¦ÓÚÈô¸É²»Í¬×´Ì¬Ö®Ò»£ºÁ¬½ÓÒѽ¨Á¢£¨Established)¡¢ÕýÔÚ¼àÌý£¨Listenling)£¬Á¬½ÓÒѹرգ¨Closed)¡£µ±Ò»¸öTCPConnection¶ÔÏóÊÕµ½ÆäËû¶ÔÏóµÄÇëÇóʱ£¬Ëü¸ù¾Ý×ÔÉíµÄµ±Ç°×´Ì¬×ö³ö²»Í¬µÄ·´Ó¦¡£ÀýÈ磬һ¸öOpenÇëÇóµÄ½á¹ûÒÀÀµÓÚ¸ÃÁ¬½ÓÊÇ´¦ÓÚÁ¬½ÓÒѹرÕ״̬»¹ÊÇÁ¬½ÓÒѽ¨Á¢×´Ì¬¡£StateģʽÃèÊöÁËTCPConnectionÈçºÎÔÚÿһÖÖ״̬ϱíÏÖ³ö²»Í¬µÄÐÐΪ¡£

4.ÊÊÓÃÐÔ

ÒÔÏÂÇé¿öʹÓÃStateģʽ£º

Ò»¸ö¶ÔÏóµÄÐÐΪȡ¾öÓÚËüµÄ״̬£¬²¢ÇÒËû±ØÐëÔÚÔËÐÐʱ¿Ì¸ù¾Ý״̬¸Ä±äËüµÄÐÐΪ¡£ Ò»¸ö²Ù×÷Öк¬ÓÐÅÓ´óµÄ¶à·ÖÖ§µÄÌõ¼þÓï¾ä£¬ÇÒÕâЩ·ÖÖ§ÒÀÀµÓڸöÔÏóµÄ״̬¡£Õâ¸ö״̬ͨ³£ÓÃÒ»¸ö»ò¶à¸öö¾Ù³£Á¿±íʾ¡£Í¨³££¬Óжà¸ö²Ù×÷°üº¬ÕâÒ»ÏàͬµÄÌõ¼þ½á¹¹¡£Stateģʽ½«Ã¿Ò»¸öÌõ¼þ·ÖÖ§·ÅÈëÒ»¸ö¶ÀÁ¢µÄÀàÖС£ÕâʹµÃÄã¿ÉÒÔ¸ù¾Ý¶ÔÏó×ÔÉíÇé¿ö½«¶ÔÏóµÄ״̬×÷Ϊһ¸ö¶ÔÏó£¬ÕâÒ»¶ÔÏó¿ÉÒÔ²»ÒÀÀµÓÚÆäËû¶ÔÏó¶ø¶ÀÁ¢±ä»¯¡£

5.½á¹¹

ºËÐÄ˼Ïë¾ÍÊÇ£ºµ±¶ÔÏóµÄ״̬¸Ä±äʱ£¬Í¬Ê±¸Ä±äÆäÐÐΪ£¬ºÜºÃÀí½â£¡¾ÍÄÃQQÀ´Ëµ£¬Óм¸ÖÖ״̬£¬ÔÚÏß¡¢ÒþÉí¡¢Ã¦ÂµµÈ£¬Ã¿¸ö״̬¶ÔÓ¦²»Í¬µÄ²Ù×÷£¬¶øÇÒÄãµÄºÃÓÑÒ²ÄÜ¿´µ½ÄãµÄ״̬£¬ËùÒÔ£¬×´Ì¬Ä£Ê½¾ÍÁ½µã£º1¡¢¿ÉÒÔͨ¹ý¸Ä±ä״̬À´»ñµÃ²»Í¬µÄÐÐΪ¡£2¡¢ÄãµÄºÃÓÑÄÜͬʱ¿´µ½ÄãµÄ±ä»¯¡£¿´Í¼£º
Stateģʽ

6.´úÂëʾÀý

StateÀàÊǸö״̬À࣬ContextÀà¿ÉÒÔʵÏÖÇл»£¬ÎÒÃÇÀ´¿´¿´´úÂ룺£º
ʵÏÖ´úÂ룺
״̬½á¹¹£º

package com.xtfggef.dp.state;

/**
 * ״̬ÀàµÄºËÐÄÀà
 * 2012-12-1
 * @author erqing
 *
 */
public class State {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public void method1(){
        System.out.println(execute the first opt!);
    }

    public void method2(){
        System.out.println(execute the second opt!);
    }
}

ʵÏÖ:

package com.xtfggef.dp.state;

/**
 * ״̬ģʽµÄÇл»Àà   2012-12-1
 * @author erqing
 * 
 */
public class Context {

    private State state;

    public Context(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }

    public void method() {
        if (state.getValue().equals(state1)) {
            state.method1();
        } else if (state.getValue().equals(state2)) {
            state.method2();
        }
    }
}
²âÊÔÀࣺ

public class Test {

public static void main(String[] args) {

    State state = new State();
    Context context = new Context(state);

    //ÉèÖõÚÒ»ÖÖ״̬
    state.setValue(state1);
    context.method();

    //ÉèÖõڶþÖÖ״̬
    state.setValue(state2);
    context.method();
}

}
¡°`
Êä³ö£º
execute the first opt!
execute the second opt!
¸ù¾ÝÕâ¸öÌØÐÔ£¬×´Ì¬Ä£Ê½ÔÚÈÕ³£¿ª·¢ÖÐÓõÄͦ¶àµÄ£¬ÓÈÆäÊÇ×öÍøÕ¾µÄʱºò£¬ÎÒÃÇÓÐʱϣÍû¸ù¾Ý¶ÔÏóµÄijһÊôÐÔ£¬Çø±ð¿ªËûÃǵÄһЩ¹¦ÄÜ£¬±ÈÈç˵¼òµ¥µÄȨÏÞ¿ØÖƵȡ£

7.Ïà¹ØÄ£Ê½

Flyweightģʽ£º½âÊÍÁ˺ÎʱÒÔ¼°ÔõÑù¹²Ïí״̬¶ÔÏó¡£ ×´Ì¬¶ÔÏóͨ³£ÊÇSingleton¡£

?

¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º[LeetCode] Jump Game II ÏÂһƪ£ºLeetCode204:Count Primes

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: