从商场打折到机房重构计算固定用户和临时用户的消费情况,再到现在的Duck,三次接触类策略模式,可见这是一个比较重要的模式.
在使用策略模式之前,首先要知道什么是策略模式?策略模式是干吗用的?策略模式有它的好处也必定存在一定的缺陷.
策略模式:
它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.
策略模式其实就是用来封装算法的。当不同的行为堆砌在一个类中,就很难避免使用条件语句来选择合适的行为。我们就可以用策略模式,将这些行为封装在一个个独立的Strategy类中,就可以消除这些类中的条件语句了。
商场打折:
商场收银时,不管理打折还是返利,都是一些算法,我们把这些算法是可变的,我们把这些变化的封装起来,也实现了面向对象的思维方式。
机房重构:
做机房收费系统时,我们对临时用户和固定用户的收费方式是不一样的,但是他们的本质是一样的,都是计算学生的消费金额,这是我们就把它写成策略模式,把两种不同的算法封装起来。
Duck:
这次又用java语言重新认识了一下策略模式,鸭子继承Duck,飞行行为实现FlyBehavior接口,呱呱叫的行为实现QuackBehavior接口。其实鸭子的行为就可以看成算法,万变不离其宗,意思是一样的,封装了鸭子的行为相当于我们封装了算法。
优点:
策略模式不仅提供了管理各种算法的办法,简化了单元测试,我们可以通过每个类自己的接口单独测试;避免了我们使用多重条件转移语句;继承有助于吸取出这些算法中的公共功能。
每一种模式都要他存在的优势,不然也不会存在。当然,缺点也是必不可少,人无完人,模式也没有十分完美的模式。
缺点:
策略模式只适用于客户端知道所有的算法或行为的情况。而且策略模式会造成很多策略类,每一个具体策略类又会产生一个新类。
----------------------------------------------------------------------------------------------------------------------------(^_^) 学习是一个循序渐进,反反复复的过程 (^_^)
上一篇 Lua序列化