首页 > 代码库 > 策略模式,我与你的三次相遇。

策略模式,我与你的三次相遇。

         从商场打折到机房重构计算固定用户和临时用户的消费情况,再到现在的Duck,三次接触类策略模式,可见这是一个比较重要的模式.

        在使用策略模式之前,首先要知道什么是策略模式?策略模式是干吗用的?策略模式有它的好处也必定存在一定的缺陷.

 

    策略模式:

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

 

   策略模式其实就是用来封装算法的。当不同的行为堆砌在一个类中,就很难避免使用条件语句来选择合适的行为。我们就可以用策略模式,将这些行为封装在一个个独立的Strategy类中,就可以消除这些类中的条件语句了。

 

商场打折:

商场收银时,不管理打折还是返利,都是一些算法,我们把这些算法是可变的,我们把这些变化的封装起来,也实现了面向对象的思维方式。


机房重构:

    做机房收费系统时,我们对临时用户和固定用户的收费方式是不一样的,但是他们的本质是一样的,都是计算学生的消费金额,这是我们就把它写成策略模式,把两种不同的算法封装起来。


Duck:

     这次又用java语言重新认识了一下策略模式,鸭子继承Duck,飞行行为实现FlyBehavior接口,呱呱叫的行为实现QuackBehavior接口。其实鸭子的行为就可以看成算法,万变不离其宗,意思是一样的,封装了鸭子的行为相当于我们封装了算法。


优点:

    策略模式不仅提供了管理各种算法的办法,简化了单元测试,我们可以通过每个类自己的接口单独测试;避免了我们使用多重条件转移语句;继承有助于吸取出这些算法中的公共功能。


每一种模式都要他存在的优势,不然也不会存在。当然,缺点也是必不可少,人无完人,模式也没有十分完美的模式。

 

缺点:

    策略模式只适用于客户端知道所有的算法或行为的情况。而且策略模式会造成很多策略类,每一个具体策略类又会产生一个新类。


        策略模式使用了三次了,第一次用C#,第二次用VB.net,第三次用java。每一次用,感觉都不一样,你问我有什么不一样的。当然是越来越熟悉的感觉了,嘿嘿。

----------------------------------------------------------------------------------------------------------------------------(^_^)     学习是一个循序渐进,反反复复的过程       (^_^)




策略模式,我与你的三次相遇。