State pattern (sencode day)
来源:互联网 发布:网页在线视频剪辑软件 编辑:程序博客网 时间:2024/06/05 06:36
当一个对象内在状态改变时运行其改变行为,这个对象看起来像改变了其类
state - 抽象状态角色
接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换。
concresteState - 具体状态角色
每一个具体状态必须完成两个职责: 本状态的行为管理以趋向状态处理
context 环境角色
客户端需要的端口 并且付诸具体状态的切换
状态模式相对来说比较复杂,它提供了一种物质运动的另一个观察视角,通过状态变更促使行为的变化
public class Client {public static void main(String[] args) {Context context = new Context();context.setLiftState(new CloseState()); context.run();context.open();}}
public abstract class LiftState {protected Context context;public Context getContext() {return context;}public void setContext(Context context) {this.context = context;}public abstract void open();public abstract void close();public abstract void run();public abstract void stop();}
public class Context {public final static OpenState openState = new OpenState();public final static CloseState closeState = new CloseState();public final static RunningState runningState = new RunningState();public final static StoppingState stopping = new StoppingState();private LiftState liftState;public LiftState getLiftState() {return liftState;}public void setLiftState(LiftState liftState) {this.liftState = liftState;this.liftState.setContext(this);}public void open(){this.liftState.open();}public void close(){this.liftState.close();}public void run(){this.liftState.run();}public void stop(){this.liftState.stop();}}
public class CloseState extends LiftState{@Overridepublic void close() { System.out.println("关闭");}@Overridepublic void open() {super.context.setLiftState(Context.openState);super.context.getLiftState().open();}@Overridepublic void run() {super.context.setLiftState(Context.runningState);super.context.getLiftState().run();}@Overridepublic void stop() {super.context.setLiftState(Context.stopping);super.context.getLiftState().stop();}}
public class OpenState extends LiftState{@Overridepublic void close() {super.context.setLiftState(Context.closeState);super.context.getLiftState().close(); }@Overridepublic void open() {System.out.println("打开");}@Overridepublic void run() { }@Overridepublic void stop() {// TODO Auto-generated method stub}}
public class RunningState extends LiftState {@Overridepublic void close() {}@Overridepublic void open() { }@Overridepublic void run() {System.out.println("正在运行");}@Overridepublic void stop() {super.context.setLiftState(Context.stopping);super.context.getLiftState().stop();}}
public class StoppingState extends LiftState {@Overridepublic void close() {}@Overridepublic void open() {super.context.setLiftState(Context.openState);super.context.getLiftState().open();}@Overridepublic void run() {super.context.setLiftState(Context.runningState);super.context.getLiftState().run();}@Overridepublic void stop() {System.out.println("停止运行...");}}
0 0
- State pattern (sencode day)
- State Pattern
- State Pattern
- The tenth pattern---------------State Pattern
- Design Pattern(3)-State Pattern
- Design Pattern 18-state
- State Design Pattern: Reminder
- 状态模式(State Pattern)
- 状态模式(State Pattern)
- State pattern (Delphi)
- 状态模式(State Pattern)
- State Design Pattern
- 状态模式(State Pattern)
- 状态模式【STATE PATTERN 】
- 状态模式【State Pattern】
- 状态模式(State Pattern)
- head first--------------state pattern
- 状态模式(State Pattern)
- 后缀数组+二分poj3261
- poj 1852 ants(模拟+想象力)
- Android exploit with a Qualcomm processor (CVE-2012-4220)
- 关键词抽取简介
- 【RT-Thread】——GUI服务器
- State pattern (sencode day)
- iphone面试笔试题目
- jQuery Timepicker Addon
- CXF Spring 基于契约优先开发
- Struts2配置文件讲解
- 收集的Java科学计算库
- js添加input
- 列空间(column space)和零空间(null space)
- xcode 无法识别iPad,iPhone真机的问题