13.6 与策略(Strategy)模式的比较
都把行为封装到具体的类中。策略模式把不同的算法封装到不同的子类;状态模式把不同状态下的行为封装到与之对应的状态子类中。
它们都是使用了合成,代理了上下文的相关操作。
一个状态对象封装了与状态相关的行为,并控制状态之间的转换。策略对象封装了算法,算法之间不存在切换。
状态模式隐藏了状态接口和子类。策略模式中,客户对象可以在运行时选择不同的算法,策略接口和具体实现对它是可见的;但是状态模式中,客户对象只能操作Context对象,状态接口和子类对它是不可见的。