小记策略模式

《Head First 设计模式》随手笔记

  策略模式定义:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

  举个例子:

  Duck这个超类下面可以有以下品种的鸭子

     

  红头鸭

  绿头鸭

  橡皮鸭

  木头鸭

  而这些鸭子都有自己的行为特征,像是

    飞翔

    叫喊

  但是因为不同的鸭子有着不同的行为特征,所有可以把这些行为特征从“Duck”中分离出来,像是

    红头鸭

        会飞

        会嘎嘎叫

    绿头鸭

        会飞

        会嘎嘎叫

    橡皮鸭

        不会飞

        会吱吱叫

    木头鸭

        不会飞

        不会叫

  这个时候我们不能单单只靠在Duck中描述的方法来行动了,因为Duck中的方法描述只是行为特定的一种而已。

  所以我们可以创建一个飞翔的特征接口FlyBehavior,其下有FlyWithWings和FlyNoWay类,以描述会飞和不会飞行为。

  同理,创建一个QuackBehavior接口,其下有Quack/Squeak/MuteQuack。

  就是这样,把个体的特征有策略地分成几个描述的方法或者类,以达到类或接口的可复用/可扩充/可维护三个目的。

  也就是说,策略模式就像是对一个事物进行分析细化一样。

  一个人,按肤色来说有黑黄白三种

  一个人的行为,按通俗讲有吃喝玩乐拉撒六种

  而吃喝玩乐拉撒对应怎么吃怎么喝等的六种行为里面,又是比较笼统的说法,所以需要细化

  吃 是大快朵颐的那种吃,还是细嚼慢咽的那种吃

  喝 是“吹一支!”的那种喝,还是“要让酒包裹住你的舌头并让味蕾闻到那种芳香”的那种喝

  玩 是惊险刺激的蹦极深潜滑翔,还是连连看消消乐斗地主

  乐 是因为外界刺激的欢乐,还是由内向外的喜悦

  至于拉撒,我就不写下去了,大家自行想象

  总结一下,策略模式就是“定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户”(没错就是上文的定义,定义已经很清楚的表达出了策略模式是什么了,在这里就不献丑了)。

猜你喜欢

转载自www.cnblogs.com/NYfor2018/p/9945788.html