状态模式
2016-06-08 11:18
330 查看
状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
使用场景:
一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。一个操作中含有庞大的多分支结构(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(); } }
相关文章推荐
- eclipse中常用的快捷键
- sql语句出现键值对冲突的解决
- Virtualbox linux设置共享文件夹
- 远程抓取图片
- 堆排序(代码片段)
- MYSQL基本操作
- 调试器工作原理(1):基础篇
- win10下安装mysql5.7
- 大数据处理的关键架构
- 修改java的静态final变量
- Java对象到json字符串的转换
- Spring MVC文件下载
- 监听editText字数计数并显示
- C++ 类的静态成员详细讲解
- android 使用View Animation实现动画加载界面
- ffmpeg 与kxmovie
- Web页面多对象多文档事件冲突的解决方案
- 软件架构概念与思想-组成派、决策派
- tmux
- 6.8站立会议6