第0章:简介
状态模式定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
状态模式本质:根据状态来分离和选择行为
参考:研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
(1)状态接口(State.java)
package com.mcc.core.designPattern.behavior.state; /** * 状态接口 * * 状态模式的定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 * 状态模式的本质:根据状态来分离和选择行为 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:36 */ public interface State { /** * 状态对应的处理 */ public void handle(); } |
(2)状态A(StateImplA.java)
package com.mcc.core.designPattern.behavior.state; /** * 状态A * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplA implements State{ /** * 状态对应的处理 */ @Override public void handle() { System.out.println("状态A处理操作"); } } |
(3)状态B(StateImplB.java)
package com.mcc.core.designPattern.behavior.state; /** * 状态B * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplB implements State{ /** * 状态对应的处理 */ @Override public void handle() { System.out.println("状态B处理操作"); } } |
(4)状态C(StateImplC.java)
package com.mcc.core.designPattern.behavior.state; /** * 状态C * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:37 */ public class StateImplC implements State{ /** * 状态对应的处理 */ @Override public void handle() { System.out.println("状态C处理操作"); } } |
(5)上下文(Context.java)
package com.mcc.core.designPattern.behavior.state; /** * 上下文,维护状态对象 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:39 */ public class Context { //持有状态对象 private State state; /** * 设置状态对象 * @param state */ public void setState(State state){ this.state = state; } /** * 处理用户感兴趣的接口方法 */ public void request(){ //处理中可能调用状态对象的方法来处理,这里可以加入其它操作 state.handle(); } } |
(6)客户端测试(Client.java)
package com.mcc.core.designPattern.behavior.state; /** * 客户端测试 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午9:44 */ public class Client { public static void main(String args[]){ //初始化各状态对象 State stateA = new StateImplA(); State stateB = new StateImplB(); State stateC = new StateImplC(); //上下文对象 Context context = new Context(); //注册状态A context.setState(stateA); context.request(); //注册状态B context.setState(stateB); context.request(); //注册状态C context.setState(stateC); context.request(); } } |