Java设计模式之状态模式
来源:互联网 发布:网络电视播放器哪个好 编辑:程序博客网 时间:2024/06/15 20:12
状态模式(state):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。解释就是状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
抽象状态类:
public abstract class State {//抽象状态类 public abstract void handle(Context context);}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()); }}
Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态:
//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); }}客户端:不断请求,不断更改状态:
public class StateClient {//客户端:不断请求,不断更改状态 public static void main(String[] args) {Context context = new Context(new ConcreteStateA());context.request();context.request();context.request();context.request();context.request(); }}运行结果:
现在是在状态A现在是在状态B现在是在状态C现在是在状态A现在是在状态B状态模式的好处:
状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。是不是就是将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易的增加新的状态和转换,目的就是消除庞大的条件分支。
状态模式的适用场景:
当一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态的改变它的行为时,就可以考虑使用状态模式了。
阅读全文
1 0
- java设计模式之状态设计模式
- 深入浅出Java设计模式之状态模式
- Java设计模式之State(状态模式)
- java设计模式之状态 模式State
- java设计模式之状态模式
- Java 设计模式之状态模式
- java与设计模式之状态模式
- Java设计模式泛型化之状态模式
- Java设计模式之状态模式
- Java设计模式之状态模式
- java 设计模式之状态模式
- 设计模式之状态模式 --- Java
- Java设计模式之状态模式
- 《Java设计模式》之状态模式
- JAVA设计模式之状态模式
- Java设计模式之状态模式
- java设计模式之状态模式
- Java设计模式之状态模式
- IT 技术交流平台
- php中intval()的int转换剖析
- Linux新手入门:Unable to locate package错误解决办法
- XRecyclerview mvpgson网络解析
- 错题
- Java设计模式之状态模式
- js 定时器的设置及删除
- MapReduce 练习一 找爷孙关系
- 国内IT风投事件
- 关于我理解的闭包(一)
- 745. Prefix and Suffix Search
- 一级购物car
- ssh框架的基本运用
- 浅谈SVN服务器迁移的一些注意事项