状态模式
2015-07-20 21:49
323 查看
状态模式定义:
英文定义:The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.
中文定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
状态模式UML类图如下(摘自《Head First Design Pattern》):
有没有发现和策略模式的类图及其相似,其实状态模式和策略模式是一对孪生兄弟,其形式完全一致,只是使用意图不一样而已。
状态模式适用场景:
1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为
2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
下面看一个示例,以灯的开关状态为例:
英文定义:The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.
中文定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
状态模式UML类图如下(摘自《Head First Design Pattern》):
有没有发现和策略模式的类图及其相似,其实状态模式和策略模式是一对孪生兄弟,其形式完全一致,只是使用意图不一样而已。
状态模式适用场景:
1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为
2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
下面看一个示例,以灯的开关状态为例:
public class Light { private LightState state; public Light(LightState state) { this.state = state; } public LightState getState() { return state; } public void setState(LightState state) { this.state = state; } public void PressSwich() { state.PressSwich(this); } }
public interface LightState { void PressSwich(Light light); }
public class LightOn implements LightState { @Override public void PressSwich(Light light) { light.setState(new LightOff()); System.out.println("关灯了..."); } }
public class LightOff implements LightState { @Override public void PressSwich(Light light) { light.setState(new LightOn()); System.out.println("灯打开了..."); } }
public class Application { public static void main(String[] args) { Light light = new Light(new LightOff()); light.PressSwich(); light.PressSwich(); } }
相关文章推荐
- 网售毕业生,谁的悲剧?
- Android 外部存储无法写入的解决方法
- MySql 命令大全
- MySQL事务隔离级别
- 张珺 2015/07/09 个人文档
- OC运行和方法实现
- [DLX重复覆盖] hdu 3529 Bomberman - Just Search!
- 陈嘉 2015/07/10 个人文档
- 如何在虚拟机中安装linux系统
- [剑指Offer]12.二进制中1的个数
- 赵晓铮 2015/7/16 个人文档
- 关于#ifndef,#define,#end的说明
- IOS基本数据类型的包装类
- 简单问题的八种排序方法
- View Controller 生命周期
- 课程笔记 06:数据结构(清华) 列表-节点
- 自定义tarBar
- 【leetcode】Product of Array Except Self
- 基于selenium的pyse自动化测试框架
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶