《Head First 设计模式》随手笔记
策略模式定义:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
举个例子:
Duck这个超类下面可以有以下品种的鸭子
红头鸭
绿头鸭
橡皮鸭
木头鸭
而这些鸭子都有自己的行为特征,像是
飞翔
叫喊
但是因为不同的鸭子有着不同的行为特征,所有可以把这些行为特征从“Duck”中分离出来,像是
红头鸭
会飞
会嘎嘎叫
绿头鸭
会飞
会嘎嘎叫
橡皮鸭
不会飞
会吱吱叫
木头鸭
不会飞
不会叫
这个时候我们不能单单只靠在Duck中描述的方法来行动了,因为Duck中的方法描述只是行为特定的一种而已。
所以我们可以创建一个飞翔的特征接口FlyBehavior,其下有FlyWithWings和FlyNoWay类,以描述会飞和不会飞行为。
同理,创建一个QuackBehavior接口,其下有Quack/Squeak/MuteQuack。
就是这样,把个体的特征有策略地分成几个描述的方法或者类,以达到类或接口的可复用/可扩充/可维护三个目的。
也就是说,策略模式就像是对一个事物进行分析细化一样。
一个人,按肤色来说有黑黄白三种
一个人的行为,按通俗讲有吃喝玩乐拉撒六种
而吃喝玩乐拉撒对应怎么吃怎么喝等的六种行为里面,又是比较笼统的说法,所以需要细化
吃 是大快朵颐的那种吃,还是细嚼慢咽的那种吃
喝 是“吹一支!”的那种喝,还是“要让酒包裹住你的舌头并让味蕾闻到那种芳香”的那种喝
玩 是惊险刺激的蹦极深潜滑翔,还是连连看消消乐斗地主
乐 是因为外界刺激的欢乐,还是由内向外的喜悦
至于拉撒,我就不写下去了,大家自行想象
总结一下,策略模式就是“定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户”(没错就是上文的定义,定义已经很清楚的表达出了策略模式是什么了,在这里就不献丑了)。