目录
0、定义
1、状态模式的三种角色
2、状态模式的UML类图
3、示例代码
0、定义
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
1、状态模式的三种角色
- 环境(Context):环境是一个类,该类有抽象状态(State)声明的变量,可以引用任何具体状态类的实例。用户对该环境(Context)类的实例在某种状态下的行为感兴趣。
- 抽象状态(State):抽象状态是一个接口或抽象类。抽象状态中定义了与环境(Context)的一个特定状态相关的若干个方法。
- 具体状态(Concrete State):具体状态是实现抽象状态的类。
2、状态模式的UML类图
3、示例代码
抽象状态
package xyz.jangle.design.state;
/*** 抽象状态* @author Administrator**/
public abstract class State {public abstract void handle();}
具体状态A (对拓展开放,可创建多个具体状态)
package xyz.jangle.design.state;public class ConcreteStateA extends State {@Overridepublic void handle() {System.out.println("to do something A ");}}
具体状态B
package xyz.jangle.design.state;public class ConcreteStateB extends State {@Overridepublic void handle() {System.out.println("to do something B ");}}
环境(上下文)(对修改关闭)
package xyz.jangle.design.state;public class Context {private State state;public void request() {if(state != null)state.handle();}public void setState(State state) {this.state = state;}}
客户端(使用)
package xyz.jangle.design.state;
/*** 状态模式* @author Administrator**/
public class AppMain20 {public static void main(String[] args) {ConcreteStateA stateA = new ConcreteStateA();Context context = new Context();context.setState(stateA);context.request();context.setState(new ConcreteStateB()); //切换状态Bcontext.request();}}
运行结果
to do something A
to do something B