状态模式
来源:互联网 发布:车牌选号软件 编辑:程序博客网 时间:2024/05/19 19:43
状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
使用场景:
- 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
- 一个操作中含有庞大的多分支结构(if..else),并且这些分支决定于对象的状态。
类图:
模式中的角色:
- 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。
- 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
- 具体状态(Concrete State):实现抽象状态定义的接口。
状态模式与策略模式:
两者的类图是一样的,模式结构一样,但是他们的设计意图是不一样的,策略模式是定义了一族算法,通过策略模式来改变类的行为。状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。两者的设计意图是不一样的。
代码示例
Context类
public class Context { private State state; public Context(State state) { this.state = state; } public void open() { state.open(this); } public void close() { state.close(this); } public State getState() { return state; } public void setState(State state) { this.state = state; }}
State类:
public abstract class State { void open(Context context) { } void close(Context context) { }}
OpenState类:
public class OpenState extends State { @Override public void close(Context c) { Log.e("zhang", "关门"); if (c!=null){ c.setState(new CloseState()); } }}
CloseState类:
public class CloseState extends State { @Override public void open(Context c) { Log.e("zhang", "开门"); if (c != null) { c.setState(new OpenState()); } }}
测试类:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); State state = new OpenState(); Context context = new Context(state); context.close(); context.open(); }}
0 0
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- MYSQL基本操作
- 远程抓取图片
- 异步请求工具类NetTool
- sql语句出现键值对冲突的解决
- eclipse中常用的快捷键
- 状态模式
- Java:比较运算符compareTo()、equals()、==之间的区别
- 使用yum安装jdk
- POJ1038 Bugs Integrated, Inc.
- 关于移动终端上的Web前端调试方法探讨
- scala 元祖
- 调试器工作原理(2):实现断点
- 远程抓取图片
- 不依赖浏览器控制台的JavaScript断点调试方法