本文共 1991 字,大约阅读时间需要 6 分钟。
状态模式(state pattern):当一个对象内在状态改变时允许其改变行为,这个对象看起来像是改变了其类(也可以理解为把众多的if-else进行优化,将不同条件下的行为封装到一个类里,再给这些类一个父类来约束它们)。
环境(context)角色:定义客户程序需要的接口,客户程序通过它满足自己的需求。维护一个具体状态角色的实例,这个实例来决定当前的状态。
抽象状态角色(state):定义一个接口来封装与环境角色一个特定状态相关的行为。 具体状态(concrete state)角色:实现状态角色定义的接口。结构非常简单。通过多态,可以动态地改变语境(context)对象的属性state的内容,从而使一个具体状态类指向另一个具体状态类,从而改变语境(context)对象的行为。
1、封装转化过程,也就是转化规则。
2、枚举可能的状态。状态模式的实质:
//抽象状态角色public abstract class State { public abstract void handle(Context context);}//Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态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 request() { this.state.handle(this); }}//具体状态class ConcreteStateA extends State { @Override public void handle(Context context) { System.out.println("现在是在状态A"); context.setState(new ConcreteStateB()); }}class ConcreteStateB extends State { @Override public void handle(Context context) { System.out.println("现在是在状态B"); context.setState(new ConcreteStateC()); }}class ConcreteStateC extends State { @Override public void handle(Context context) { System.out.println("现在是在状态C"); context.setState(new ConcreteStateA()); }}//客户端,不断地发请求public class Client { public static void main(String[] args) { Context context = new Context(new ConcreteStateA()); context.request(); context.request(); context.request(); context.request(); context.request(); }}
上一篇:
下一篇:转载地址:http://kmrai.baihongyu.com/