允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
【1】具体做法
将某个事物的各种状态都定义成一个类,每个类都拥有具体事物的行为,这些不同状态内部的方法对应着该状态下应有的行为。
实际上的做法是,由于某个事物的行为会随着自己状态的改变而改变,为了扩展,做法不再是根据状态的不同,让事物本身去改变行为。
这个时候,将状态都定义成一个类,同时具有着该事物的每个行为。就像是这个事物在每个状态下都有了自己的一个分身。
当外界需要某个状态下对应的行为,不是事物本身变来变去应对,而是委托给这些分身。
我们可以随时增加一个分身来处理新状态,这使得在面对应接不暇的需求时,也可以从容应对。
因为实际上干活的不是我一个!只不过是外界的人看起来是我一个人完成了所有的事。
(他们不能分辨我和分身的真假,嘿嘿)
状态模式和策略模式的类图一摸一样,但是这两种模式的意图存在差别。
【1】对于客户而言,
状态模式:
主体对象在不同状态下,使用不同的状态对象来完成行为,使用主体对象的客户对这些状态对象却浑然不知。
策略模式:
使用的客户通常需要明确指定用哪个组合的对象来实现行为。
【2】针对的场景
状态模式:
替代在一个类中放置许多判断条件的方案。
策略模式:
除了继承之外一种弹性设计的替代方案。
design-mode-demo/src/pattern/state