学习资料主要参考: 《Head First 设计模式》
策略模式和状态模式是双胞胎,在出生时才分开。
策略模式是围绕可以互换的算法来创建成功业务的,然而状态模式是通过改变对象内部的状态来帮助对象控制自己的行为。
简要步骤
- 定义一个State 接口,在这个接口里,所有动作都对应了一个方法
- 为每个状态实现状态类
- 将动作委托到状态类
定义
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
类图
从类图上看,策略模式和状态模式是一样的,但是两者的差别在于各自的“意图”。
对状态模式而言,我们将行为封装在状态对象中,context的行为随时可委托到那些状态对象中的一个,随着时间流逝,状态发生变化,context的行为也会跟着改变。但是context的客户对于状态对象了解不多,甚至根本浑然不觉。
对策略模式而言,客户通常主动指定 Context 所要组合的策略对象是哪一个。
一般来说,当我们在考虑继承的替代方案时,可以考虑使用策略模式,这样子我们就能通过组合不同的对象来改变行为。
当我们面临需要在 context 中放置许多条件判断时,就可以考虑使用状态模式。