状态模式--的一个试用场景
2015-06-02 18:41
295 查看
原文连接
电梯的运行简单有这么几个状态:运行、停止、关闭、打开,电梯想要正常的运行,就必须得遵循一定的规则,例如运行的时候不能开门,开门状态不能运行。按照平常的逻辑,分别创建open,close,run,stop四个方法,方法里通过switch当前的状态,执行不同的动作。这种处理有几个问题:
1、扩展性太差
如果电梯还有两个状态:通电状态和断电状态。那就要在open,close,run,stop四个方法里都要增加判断条件,这与开闭原则相违背。
2、非常规状态无法实现
电梯在门开着的状态下就不能上下运行了吗?电梯有没有发生过只有运行没有停止状态呢?电梯故障嘛。还有电梯在检修的时候,可以在stop状态下不开门,这也是正常的业务需求啊。如果加上这些需求,又有多少程序要改动?
既然平常的办法会带来这么多问题,当然要找好的模式来解决——状态模式
实现类图如下:
具体代码请移步原文
电梯的运行简单有这么几个状态:运行、停止、关闭、打开,电梯想要正常的运行,就必须得遵循一定的规则,例如运行的时候不能开门,开门状态不能运行。按照平常的逻辑,分别创建open,close,run,stop四个方法,方法里通过switch当前的状态,执行不同的动作。这种处理有几个问题:
1、扩展性太差
如果电梯还有两个状态:通电状态和断电状态。那就要在open,close,run,stop四个方法里都要增加判断条件,这与开闭原则相违背。
2、非常规状态无法实现
电梯在门开着的状态下就不能上下运行了吗?电梯有没有发生过只有运行没有停止状态呢?电梯故障嘛。还有电梯在检修的时候,可以在stop状态下不开门,这也是正常的业务需求啊。如果加上这些需求,又有多少程序要改动?
既然平常的办法会带来这么多问题,当然要找好的模式来解决——状态模式
实现类图如下:
具体代码请移步原文
相关文章推荐
- hdu 2870 Largest Submatrix(dp)
- 跨iframe框架操作元素
- Android中的Interpolator
- 对象序列化和反序列化
- 我的cocos2d-x-3.2集成云风pbc lua binding方法
- Linux中的EAGAIN含义
- 正确处理浏览器在下载文件时HTTP头的编码问题(Content-Disposition)
- CMD:[2]怎样获取文件夹的目录层次结构
- leetcode Valid Parentheses
- android studio 项目中引入第三方lib
- iMX257获取PHY的link状态
- 数理统计
- 7zip的编译
- 字节对齐实践(2)
- LINQ查询基本操作
- python 链接sharepoint 2013 REST api
- thymleaf分支用法
- Translation of Semantics with Applications【持续更新】
- Unexpected end of ZLIB input stream
- 解决Android Studio 和 Android SDK Manager 无法在线更新的问题.