行为模式:State(状态)
2013-02-07 20:54
337 查看
The state interface and two implementations. The state's method has a reference to the context object and is able to change its state.
interface Statelike { /** * Writer method for the state name. * @param STATE_CONTEXT * @param NAME */ void writeName(final StateContext STATE_CONTEXT, final String NAME); } class StateA implements Statelike { /* (non-Javadoc) * @see state.Statelike#writeName(state.StateContext, java.lang.String) */ @Override public void writeName(final StateContext STATE_CONTEXT, final String NAME) { System.out.println(NAME.toLowerCase()); STATE_CONTEXT.setState(new StateB()); } } class StateB implements Statelike { /** State counter */ private int count = 0; /* (non-Javadoc) * @see state.Statelike#writeName(state.StateContext, java.lang.String) */ @Override public void writeName(final StateContext STATE_CONTEXT, final String NAME) { System.out.println(NAME.toUpperCase()); // Change state after StateB's writeName() gets invoked twice if(++count > 1) { STATE_CONTEXT.setState(new StateA()); } } }
The context class has a state variable that it instantiates in an initial state, in this case
StateA. In its method, it uses the corresponding methods of the state
object.
public class StateContext { private Statelike myState; /** * Standard constructor */ public StateContext() { setState(new StateA()); } /** * Setter method for the state. * Normally only called by classes implementing the State interface. * @param NEW_STATE */ public void setState(final Statelike NEW_STATE) { myState = NEW_STATE; } /** * Writer method * @param NAME */ public void writeName(final String NAME) { myState.writeName(this, NAME); } }
The test below shows also the usage:
public class TestClientState { public static void main(String[] args) { final StateContext SC = new StateContext(); SC.writeName("Monday"); SC.writeName("Tuesday"); SC.writeName("Wednesday"); SC.writeName("Thursday"); SC.writeName("Friday"); SC.writeName("Saturday"); SC.writeName("Sunday"); } }
According to the above code, the output of main() from TestClientState should be:
monday TUESDAY WEDNESDAY thursday FRIDAY SATURDAY sunday
相关文章推荐
- 状态模式(State)----行为笔记
- 【设计模式基础】行为模式 - 8 -状态(State)
- 【java设计模式之State(对应每种状态的行为) 】
- [设计模式](十二):备忘录模式(Memento)|状态模式(State) - (两种类状态行为模式)
- C++实现设计模式 - STATE(状态)—对象行为模式(第二十个)
- [设计模式]状态模式(State)---状态变 行为变
- 行为设计模式---状态模式(State)
- 【设计模式学习笔记二十一】【行为模式】【状态模式(State)】
- 状态模式state(对像行为)
- Java设计模式(22)——行为模式之状态模式(State)
- 【设计模式】行为模式之State状态
- 行为类模式(八):状态(State)
- 状态模式(State)----行为笔记
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++之十九(State状态模式)
- Java从设计模式[本场比赛状态转换武器]状态分析(State)模式
- 状态(state)模式
- 状态模式(State)
- c++设计模式之State状态模式.txt
- 设计模式(20)—— State (状态)