行为型模式——策略模式(Strategy)

开头

     随着设计模式的学习,我们来到了最后一个模式——那就是行为型模式,前面我们讲了创建型模式,他是描述如何更好的创建对象,后来我们学习了结构型模式,它讲了如何更好的描述类与类之间的组合,那么今天我们学习的行为型模式是描述类与类之间如何更好的分配职责和交互。三者之间层层递进,环环相扣。那么我们今天就拿行为型模式中最简单的一个模式——策略模式。看看策略模式是如何完成类与类之间交互的?


内容

    当你看到策略两个字的时候你会想到什么?策略是一种计谋,一种手段,对待某一件事情产生的多种方法,例如商场打折策略最明显,为了赚取更大的利益,商场开始进行打折促销活动,满多少不是减价就是打折,这都是策略。

   按照以前的思路我们可能用if语句写,如果满足什么什么按原价收取,否则怎样,可是随着收费策略增多,例如今天是双十一,例如满足多少钱,半价处理。我们是不是还得在代码里面更改。这样严重违反了开闭原则。所以策略模式来了,所谓的策略模式就是将每一种策略变成一个个具体的类,将每一个类封装起来,让它们之间互相替换。

   

  策略模式大家可以分为三类角色,分别为:抽象策略类(Strategy),具体策略类(ConcreteStrategy)、环境类(Context)

抽象策略类(Strategy):支持算法的抽象方法,是所有具体策略类的父类。

具体策略类(ConcreteStrategy):每一种具体的策略算法。

环境类(Context):使用具体算法的角色,根据客户端的情况,采用具体的的策略,定义所有的策略。

  

客户端


总结

策略模式(Strategy):定义了算法家族,分别封装起来,然他们之间相互替换。此模式让算法的变化,不会影响到使用算法的客户。

优点:(1)扩展性提高,可灵活的扩展行为,且不会违背开闭原则。

          (2)策略可互相替换。

          (3)可以避免多重条件选择语句。

缺点:(1)任何微小的变化就可能增加一个新的策略。

         (2)客户端不能使用多个策略类,客户端每次只能使用一个策略类,不支持使用一个策略类完成部分功能后再使用另一个策略类来完成剩余功能的情况。

适用环境:(1)一个系统可以有多种策略和方法。

                (2)当一个对象有多个行为的时候,可采用策略模式。


   策略模式简单来说就是将一个对象的多个具体策略进行独立封装起来,彼此之间可进行替换。

   关于策略模式我们今天就先分享到这里,如果本篇博客对于初学者的您有一定的帮助,记得给博主点赞哦。



猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/80474197