设计模式之状态模式IFORNOIF(二十二)
今天大风大雨, 但心情还行, 继续撸DOTA
状态模式(state pattern)定义
[blockquote]
当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了其类
[/blockquote]
这在我们开发的业务中太常见了, 角色权限的管理, 给予不同的权限, 不同角色的操作就会发生改变
该类图中包含三个角色
[blockquote]
- Context: 包含状态的对象, 根据这些状态进行响应
- State: 状态接口, 定义状态
- ConreteState: 具体的状态, 并且实施对应状态的行为
[/blockquote]
状态模式解决的问题
[blockquote]
- 当控制一个对象状态的条件表达式过于复杂时的情况. 把状态的判断逻辑转移到表示不同状态的一系列类中, 可以把复杂的判断逻辑简化
- 提到状态 我们的代码中可能有各种 状态的判断使用的是if else 要是只是少量没必要使用状态模式, 但是要是很多呢, 那就使用状态模式吧
- 使用多态代替了条件的判断, 这样我们代码的扩展性更加的强, 要加一些状态, 可以直接创建
- 状态是可以被共享的, 在世纪的开发中我们会经常定义一些CommontStatus类, 表示的一些常量
- 状态被管理者, 我们只需要关注一个固定的状态到其他状态的转换
- 安全, 如上, 我们设置状态时, 必须是接口的实现类, 而不是一些整数, 这样可以杜绝魔数(莫名其妙的数字, 比如status == 1 哈哈)
[/blockquote]
总结: 状态模式适用某一个对象的行为取决于该对象的状态, 并且该对象的状态在运行时的转换, 又或者有很多的判断, 而这些判断只是因为某个不同而不断的切换(该判断下的对象的实现复杂的情况下)
相关推荐
benjonc 2020-07-04
wangxiaohua 2014-05-29
坚持是一种品质 2019-12-08
titans 2013-01-08
xhqiang 2019-06-21
RebornLee 2019-06-20
Clevebaby 2017-10-02
Steven 2019-03-25
pythoncream 2019-01-15
PHP100 2019-03-28
PHP100 2019-03-28
PHP100 2019-03-28
PHP100 2019-03-27
vczh的日常 2018-04-23
vczh的日常 2018-04-13
MATLAB 2018-01-19
迷思 2017-12-07