java设计模式之状态模式
状态模式
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
状态模式UML图
上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。
抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
具体状态(Concrete State):实现抽象状态定义的接口。
状态模式代码
package com.roc.state; 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 stateChange(){ state.action(this); } }
package com.roc.state; /** * 抽象状态类 * @author liaowp * */ public abstract class State { public abstract void action(Context context); }
package com.roc.state; public class OpenSate extends State{ public void action(Context context) { System.out.println("开"); context.setState(new CloseState()); } }
package com.roc.state; public class CloseState extends State{ public void action(Context context) { System.out.println("关"); context.setState(new OpenSate()); } }
package com.roc.state; /** * 状态模式 * @author liaowp * */ public class Client { public static void main(String[] args) { Context context=new Context(new CloseState()); context.stateChange(); context.stateChange(); context.stateChange(); context.stateChange(); context.stateChange(); context.stateChange(); context.stateChange(); context.stateChange(); } }
状态模式适用场景
状态模式将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
所有状态相关的代码都存在于某个ConcereteState中,所以通过定义新的子类很容易地增加新的状态和转换。
状态模式通过把各种状态转移逻辑分不到State的子类之间,来减少相互间的依赖。
作者:鹏鹏
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题请联系906522957@qq.com