美文网首页程序员
小记策略模式

小记策略模式

作者: NYor | 来源:发表于2018-11-05 11:36 被阅读0次

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

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

    举个例子:

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

        红头鸭

        绿头鸭

        橡皮鸭

        木头鸭

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

        飞翔

        叫喊

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

        红头鸭

            会飞

            会嘎嘎叫

        绿头鸭

            会飞

            会嘎嘎叫

        橡皮鸭

            不会飞

            会吱吱叫

        木头鸭

            不会飞

            不会叫

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    相关文章

      网友评论

        本文标题:小记策略模式

        本文链接:https://www.haomeiwen.com/subject/ngojxqtx.html