【设计模式】之状态模式
来源:互联网 发布:鼠绘软件sai 编辑:程序博客网 时间:2024/05/04 05:22
Java设计模式之状态模式
一、 状态模式
状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。
二、 状态模式的实现
首先创建一个state接口定义一个操作,然后创建一些实现了state接口具体状态类(concrete state classes)。Context类持有State的引用。StaePatternDemo 将具体展现状态模式的应用。
类之间的继承关系:
步骤一:创建一个state接口
package study_02.designpattern.state;public interface State { public void doAction(Context context);}
步骤二:创建Context类
package study_02.designpattern.state;public class Context { private State state; public Context(){ state = null; } public void setState(State state){ this.state = state; } public State getState(){ return state; }}
步骤三:创建实现了state接口的具体的类
package study_02.designpattern.state;public class StartState implements State { public void doAction(Context context) { System.out.println("Player is in start state"); context.setState(this); } public String toString(){ return "Start State"; }}
package study_02.designpattern.state;public class StopState implements State { public void doAction(Context context) { System.out.println("Player is in stop state"); context.setState(this); } public String toString(){ return "Stop State"; }}
步骤四:具体应用场景
package study_02.designpattern.state;public class StatePatternDemo { public static void main(String[] args) { Context context = new Context(); StartState startState = new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); StopState stopState = new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); }}
步骤五:输出结果
Player is in start state
Start State
Player is in stop state
Stop State
三、参考资料
http://www.tutorialspoint.com/design_pattern/state_pattern.htm
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- 浙江大学PAT上机题解析之3-09. 队列中的元素排序
- 时间效率分析
- [poj 2991]Crane[线段树表示向量之和,而非数量]
- Linux Generic Netlink 设计与实现
- 深度学习 工具包
- 【设计模式】之状态模式
- Linux下定时器的使用及实现秒以下精确定时与休眠
- jQuery-对Radio/CheckBox的操作集合
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- Android Activity生命周期
- Python语言规范
- android progressDialog的使用
- MediaCodec Sample
- 2013暑假江西联合训练赛(赛后) 二进制求和 (树状数组,这里需要变形下)