策略模式:它定义了算法家族,分别封装起来,可以让算法在不影响到客户端的情况下,使模式可以根据不同的场景进行对应的切换。
举个容易理解的栗子,像日常生活中,我们去超市又或者是某个网上商店购买商品,vip这种东西相信大家都不会陌生,当你没有vip是个普通顾客的时候结算的总额一般会跟有vip的顾客有区别,当然区别一边就是有vip的购买的比较便宜些。二者相同之处就是都是买东西,都需要结账,不同之处是,二者结算的计算方式会不一样。针对不同类型的顾客,我们的计算方式都会不一样,可以认为计算方式是一种算法,我们需要根据不同类型的顾客切换不同的算法去结算。
策略模式的大致组成结构:
1、环境上下文Context
上下文持有一个startegy的引用
2、策略对象
一般是抽象出算法的公共功能的接口或者抽象类。
3、具体策略对象
封装了具体的算法行为的对象
那么在具体实现上,大概如下:
环境上下文
策略对象
具体策略对象
策略模式的优点:
从上面的例子可以看出,上面一系列的算法在概念上来说,它们做的都是一种事情,就是计算结算信息,区别在于不一样的计算方式。使用策略模式,实现了以相同的方式调用所有的算法,减少了各种算法类与使用算法类(客户端)的之间的耦合。策略模式的一系列算法是可以相互替换的,平等的,避免了多重条件if...else if...else语句,便于维护。
策略模式的缺点:
客户端必须理解知道所有的策略类,才能决定要选用那种策略合适。策略类越多,对象的数量也就越多。
网友评论