定义
状态模式允许对象内部
状态改变时改变他的行为,对象看起来好像修改了他的类.
要点
- Context会将行为委托给当前的状态对象.
- 状态模式和策略模式拥有相同的类图,但是他们的意图不同.
- 状态的切换可以由Context类或者状态类来切换
个人理解
状态模式和策略模式很像,但他们又有许多不同之处.策略模式会在外部控制对象使用组合或者委托来使对象在运行时执行不同的行为.而状态模式更像是将这些行为和状态的改变封装在内部,我们外部只是需要做一些小小的动作,其余状态的改变都是在对象内部
自动完成的!状态模式同时更方便我们来扩展代码,避免了代码中大量出现switch
语句却不好维护的尴尬.
针对状态模式的实现,书中给出了两种实现方案,我们先来阐述下实现以及特点.
第一种:将状态的切换交给对象的各个状态类.这是书中主要在讲的一种方式,先是通过构造方法将Context的对象传入到状态类中,这种写法在Context中写一些get
方法,获取到对象的各个状态类,这是为了一定程度上的解耦,但依然可以看出,我们将改变状态的时机交给状态类的话,未免耦合还是有一些高.然后当Context需要委托执行动作时,只要执行当前状态下的委托便可以了.
第二种:将状态的切换留在Context中.我们需要对Context这个类的状态切换做更多的操作,但写法如何能更加优雅是一个很值得深思的问题.