The State Pattern 状态模式

A little known fact: the Strategy and State Patterns were twins separated at birth. As you know, the Strategy Pattern went on to create a wildly successful business around interchangeable algorithms. State, however, took the perhaps more noble path of helping objects to control their behavior by changing their internal state. He’s often overheard telling his object clients


状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象。使得行为会随着内部状态的改变而改变。封装基于状态的行为,并将行为委托到当前状态。

策略模式的类图与状态模式的类图是一样的。当它们的意图不一样:

以状态模式而言,我们将一群算法封装在状态对象中,context的行为随时可以委托到那些状态对象中的一个。随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出context内部的状态。因此,context的行为也会随着变化。但是context的客户对于状态对象了解不多,甚至是浑然不觉。我们把状态模式想成是不用在context中放置许多条件判断的替代方案。通过在context内简单地改变状态对象来改变context的行为。

而以策略模式而言,客户通常主动指定context所要组合的策略对象是哪一个。对于某个context对象来说,通常都只有一个最适当的策略对象。一般来说,我们把策略模式想成是除了继承之外的一种弹性替代方案。如果你使用继承定义一个类的行为,你将被这个行为困住,甚至要修改它都难。有了策略模式,你可以通过组合不同的对象来改变行为。


在个别的状态类中封装状态行为,结果总是增加这个设计中类的个数。这就是为了要获取弹性而付出的代价。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值