1.Òâͼ
ÔÊÐíÒ»¸ö¶ÔÏóÔÙÆäÄÚ²¿×´Ì¬¸Ä±äʱ£¬¸Ä±äËüµÄÐÐΪ¡£¶ÔÏó¿´ÆðÀ´ËƺõÐÞ¸ÄÁËËüµÄÀà¡£
2.±ðÃû
״̬¶ÔÏó£¨Objects for States)
3.¶¯»ú
¿¼ÂÇÒ»¸ö±íÊ¾ÍøÂçÁ¬½ÓµÄÀàTCPConnection¡£Ò»¸öTCPConnection¶ÔÏóµÄ״̬´¦ÓÚÈô¸É²»Í¬×´Ì¬Ö®Ò»£ºÁ¬½ÓÒѽ¨Á¢£¨Established)¡¢ÕýÔÚ¼àÌý£¨Listenling)£¬Á¬½ÓÒѹرգ¨Closed)¡£µ±Ò»¸öTCPConnection¶ÔÏóÊÕµ½ÆäËû¶ÔÏóµÄÇëÇóʱ£¬Ëü¸ù¾Ý×ÔÉíµÄµ±Ç°×´Ì¬×ö³ö²»Í¬µÄ·´Ó¦¡£ÀýÈ磬һ¸öOpenÇëÇóµÄ½á¹ûÒÀÀµÓÚ¸ÃÁ¬½ÓÊÇ´¦ÓÚÁ¬½ÓÒѹرÕ״̬»¹ÊÇÁ¬½ÓÒѽ¨Á¢×´Ì¬¡£StateģʽÃèÊöÁËTCPConnectionÈçºÎÔÚÿһÖÖ״̬ϱíÏÖ³ö²»Í¬µÄÐÐΪ¡£
4.ÊÊÓÃÐÔ
ÒÔÏÂÇé¿öʹÓÃStateģʽ£º
Ò»¸ö¶ÔÏóµÄÐÐΪȡ¾öÓÚËüµÄ״̬£¬²¢ÇÒËû±ØÐëÔÚÔËÐÐʱ¿Ì¸ù¾Ý״̬¸Ä±äËüµÄÐÐΪ¡£ Ò»¸ö²Ù×÷Öк¬ÓÐÅÓ´óµÄ¶à·ÖÖ§µÄÌõ¼þÓï¾ä£¬ÇÒÕâЩ·ÖÖ§ÒÀÀµÓڸöÔÏóµÄ״̬¡£Õâ¸ö״̬ͨ³£ÓÃÒ»¸ö»ò¶à¸öö¾Ù³£Á¿±íʾ¡£Í¨³££¬Óжà¸ö²Ù×÷°üº¬ÕâÒ»ÏàͬµÄÌõ¼þ½á¹¹¡£Stateģʽ½«Ã¿Ò»¸öÌõ¼þ·ÖÖ§·ÅÈëÒ»¸ö¶ÀÁ¢µÄÀàÖС£ÕâʹµÃÄã¿ÉÒÔ¸ù¾Ý¶ÔÏó×ÔÉíÇé¿ö½«¶ÔÏóµÄ״̬×÷Ϊһ¸ö¶ÔÏó£¬ÕâÒ»¶ÔÏó¿ÉÒÔ²»ÒÀÀµÓÚÆäËû¶ÔÏó¶ø¶ÀÁ¢±ä»¯¡£
5.½á¹¹
ºËÐÄ˼Ïë¾ÍÊÇ£ºµ±¶ÔÏóµÄ״̬¸Ä±äʱ£¬Í¬Ê±¸Ä±äÆäÐÐΪ£¬ºÜºÃÀí½â£¡¾ÍÄÃQQÀ´Ëµ£¬Óм¸ÖÖ״̬£¬ÔÚÏß¡¢ÒþÉí¡¢Ã¦ÂµµÈ£¬Ã¿¸ö״̬¶ÔÓ¦²»Í¬µÄ²Ù×÷£¬¶øÇÒÄãµÄºÃÓÑÒ²ÄÜ¿´µ½ÄãµÄ״̬£¬ËùÒÔ£¬×´Ì¬Ä£Ê½¾ÍÁ½µã£º1¡¢¿ÉÒÔͨ¹ý¸Ä±ä״̬À´»ñµÃ²»Í¬µÄÐÐΪ¡£2¡¢ÄãµÄºÃÓÑÄÜͬʱ¿´µ½ÄãµÄ±ä»¯¡£¿´Í¼£º

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¡£
?