策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用类之间的耦合。
结构图:
如图所示,Strategy类层次为Context定义了一系列的可供重用的算法和行为,继承有助于析取出这些算法中的公共功能。下面我用一个普通超市里收费的例子简单模拟了这个模式。我把其中对应的类介绍一下:
父类:父类作用,有个接口获取购买的现金总额,然后计算完打折或者满级,返回真实要支付的金额
子类:(相当于一个个策略)在父类的接口中进行不一样的计算
打折类,在初始化的时候传入折扣数
满减类,在初始化传入满多少减多少
策略类
控制器中使用:
为了好理解策略类,所以我这样写,最好的写法是策略类中那样,加入简单工厂模式,这样使用起来就很方便了!也许你看到这已经把简单工厂模式和策略模式混一起了,反正我第一次看的时候确实是弄混了,接下来描述下两个模式的区别.
简单工厂模式:
客户端传一个条件进工厂类,工厂类根据条件创建相应的产品类对象,并return给客户端,供客户端使用。即客户端使用的是工厂类生产的产品对象进行操作。
策略模式:
客户端传达给context类的是一个实例,context类只是将该实例拿过去在context类的环境里执行该实例的方法。即客户端使用自己传给Context的策略的对象进行操作.