状态模式
来源:互联网 发布:传智播客python怎么样 编辑:程序博客网 时间:2024/05/19 17:49
一、什么是状态模式?
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。
结构图:
具有的角色:
环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。
抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
具体状态(ConcreteState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为。
二、代码类
环境角色类
public class Context { //持有一个State类型的对象实例 private State state; public void setState(State state) { this.state = state; } /** * 用户感兴趣的接口方法 */ public void request(String sampleParameter) { //转调state来处理 state.handle(sampleParameter); }}抽象状态类
public interface State { /** * 状态对应的处理 */ public void handle(String sampleParameter);}具体状态类
public class ConcreteStateA implements State { @Override public void handle(String sampleParameter) { System.out.println("ConcreteStateA handle :" + sampleParameter); }}
public class ConcreteStateB implements State { @Override public void handle(String sampleParameter) { System.out.println("ConcreteStateB handle :" + sampleParameter); }}客户端类
public class Client { public static void main(String[] args){ //创建状态 State state = new ConcreteStateB(); //创建环境 Context context = new Context(); //将状态设置到环境中 context.setState(state); //请求 context.request("test"); }}
从上面可以看出,环境类Context的行为request()是委派给某一个具体状态类的。通过使用多态性原则,可以动态改变环境类Context的属性State的内容,使其从指向一个具体状态类变换到指向另一个具体状态类,从而使环境类的行为request()由不同的具体状态类来执行。
三、使用场景
一个对象的行为取决于他的状态,并且它必须在运行时根据状态改变它的行为;
一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
0 0
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 中位数
- Cordova 开发属于自己的插件
- Greenplum中Heap表膨胀查看和解决方案
- 一些收藏的网址
- Cent os mysql主从同步问题
- 状态模式
- HDU 2376 Average distance(树上两点间的期望)
- Android 编程下的 TraceView 简介及其案例实战
- jQuery EasyUI —Combo(自定义下框)
- Java注解的实际应用案例讲解
- iOS 7适配上存在的各种问题
- 5.5以上版本查询锁信息
- SDUT OJ 数据结构实验之二叉树二:遍历二叉树
- 学Unity3D游戏开发到官方合作机构