您的位置:首页 > 其它

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

2014-09-28 16:55 162 查看
从商场打折到机房重构计算固定用户和临时用户的消费情况,再到现在的Duck,三次接触类策略模式,可见这是一个比较重要的模式.
在使用策略模式之前,首先要知道什么是策略模式?策略模式是干吗用的?策略模式有它的好处也必定存在一定的缺陷.

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

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

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



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



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



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

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

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

策略模式使用了三次了,第一次用C#,第二次用VB.net,第三次用java。每一次用,感觉都不一样,你问我有什么不一样的。当然是越来越熟悉的感觉了,嘿嘿。
----------------------------------------------------------------------------------------------------------------------------(^_^)
学习是一个循序渐进,反反复复的过程 (^_^)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: