策略模式和状态模式是双胞胎,策略模式是围绕可以互换的算法来创建成功业务的。而状态模式通过改变对象内部的状态来帮助对象控制自己的行为。
实现状态机:
1.找出所有状态。
2.创建一个实例变量保持所有目前的状态。
例如final static int SOLD_OUT = 0;final static int CAN_SOLD = 0;
用状态对象的概念:State sold_out;State can_sold;
3.将系统中可能发生的动作整合起来。
4.创建一个状态接口,将动作封装。
5.所有状态都继承这个接口。
我们应该试着局部化每个状态的行为,这样一来,如果我们针对某个状态坐了改变,就不会把其他的代码给搞乱,换句话说,遵守"封装变化"原则。将状态对象封装在各自的类中,然后在动作发生时委托给当前状态。
定义状态模式:
状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了他的类。
这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象。
策略模式和状态模式:
这两者的类图是几乎一样的,但是区别在于意图。
状态模式:将一群行为封装在状态对象中,context的行为随时委托到那些状态对象中的一个。随着时间的流逝,当前状态在状态对象集合中游走改变,以反映context内部的状态,因此,context的行为也会跟着改变,但是context的客户对于状态了解不多,甚至根本是浑然不觉。
策略模式:客户通常主动制定contgext所要组合的策略对象是哪一个。对于某个context对象来说,通常只有一个最适合的策略对象。