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

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

        在使用策略模式之前,首先要知道什么是策略模式?

策略模式是干吗用的?策略模式有它的优点也必然存在一定的缺陷.

 

    策略模式:

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

 

   策略模式事实上就是用来封装算法的。

当不同的行为堆砌在一个类中,就非常难避免使用条件语句来选择合适的行为。

我们就能够用策略模式,将这些行为封装在一个个独立的Strategy类中。就能够消除这些类中的条件语句了。

 

商场打折:

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


机房重构:

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


Duck:

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


长处:

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


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

 

缺点:

    策略模式仅仅适用于client知道全部的算法或行为的情况。并且策略模式会造成非常多策略类。每个详细策略类又会产生一个新类。


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

当然是越来越熟悉的感觉了,嘿嘿。

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




posted @ 2017-05-22 09:34  jzdwajue  阅读(109)  评论(0编辑  收藏  举报