二十 设计模式之状态模式
来源:互联网 发布:qsv格式转换软件 编辑:程序博客网 时间:2024/05/23 00:06
定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类
类图
通用代码 //抽象环境角色 public abstract class State { //定义一个环境角色,提供子类访问 protected Context context; public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } public abstract void handle1(); public abstract void handle2(); } //环境角色 public class ConcreteState1 extends State { @Override public void handle1() { //被状态下必须处理的逻辑 } @Override public void handle2() { //设置当前状态为state1 super.context.setCurrentState(Context.STATE2); //过渡到state2状态,由Context实现 super.context.handle2(); } } public class ConcreteState2 extends State { @Override public void handle1() { super.context.setCurrentState(Context.STATE1); super.context.handle1(); } @Override public void handle2() { } } //具体环境角色 public class Context { public final static State STATE1=new ConcreteState1(); public final static State STATE2=new ConcreteState2(); //当前状态 private State CurrentState; //获得当前状态 public State getCurrentState() { return CurrentState; } //定义状态 public void setCurrentState(State currentState) { CurrentState = currentState; this.CurrentState=currentState; this.CurrentState.setContext(this); } //行为委托 public void handle1() { this.CurrentState.handle1(); } public void handle2() { this.CurrentState.handle2(); } } //场景类 public class Client { public static void main(String[] args) { //定义环境角色 Context context = new Context(); //初始化状态 context.setCurrentState(new ConcreteState1()); //行为执行 context.handle1(); context.handle2(); } } 优点 1. 结构清晰 2. 遵循设计原则。很好的体现了开闭原则和单一职责原则 3. 封装性非常好 缺点 子类会很多,每个状态都有一个子类 使用场景 1. 行为随状态改变而改变的场景 2. 条件,分支判断语句的替代者 注意事项 状态模式适用于当某个对象在它的状态发生改变时,它的行为随着发生比较大的变化,即行为受状态约束的情况下可以使用状态模式
- 二十 设计模式之状态模式
- C++设计模式之二十:State(状态模式)
- C++设计模式之二十--State状态模式
- 设计模式(二十)---状态模式
- JAVA设计模式(二十)----状态模式
- 设计模式之十 --- 状态(State)模式
- 设计模式之十 --- 状态(State)模式
- 设计模式之状态模式(二)
- C++设计模式之状态模式(二)
- 设计模式(二十)----- 状态模式(State)----(JAVA版)
- Java设计模式(二十)----状态模式
- JAVA--状态模式(State)--设计模式二十
- 小话设计模式(二十)状态模式
- 设计模式解析和实现(C++, java)之二十--状态(state)模式
- Java开发中的23种设计模式之二十:状态模式(State)
- 设计模式之二十------Visitor(访问者)
- 设计模式二 状态模式
- 设计模式之(二十)策略模式(strategy)
- 最简单的AT&T汇编程序
- 64位整数格式化小技巧
- 通过.htaccess对手机与PC终端分流呈现页面
- 算法
- 十九 设计模式之访问者模式
- 二十 设计模式之状态模式
- Windows XP 上 KB977377导致证书不可用问题
- Fedora如何删除旧内核?
- (spring2.x整合)applicationContext-dao.xml
- CUDA实现平衡树求前缀和
- 二十一 设计模式之解释器模式
- Android字符串资源及其格式化
- 二十二 设计模式之享元模式
- 堪称一绝的“IO口扫键”法