设计模式之策略模式

策略模式:它定义了算法家族,分别封装起来,可以让算法在不影响到客户端的情况下,使模式可以根据不同的场景进行对应的切换。

举个容易理解的栗子,像日常生活中,我们去超市又或者是某个网上商店购买商品,vip这种东西相信大家都不会陌生,当你没有vip是个普通顾客的时候结算的总额一般会跟有vip的顾客有区别,当然区别一边就是有vip的购买的比较便宜些。二者相同之处就是都是买东西,都需要结账,不同之处是,二者结算的计算方式会不一样。针对不同类型的顾客,我们的计算方式都会不一样,可以认为计算方式是一种算法,我们需要根据不同类型的顾客切换不同的算法去结算。

策略模式的大致组成结构:

1、环境上下文Context

上下文持有一个startegy的引用

2、策略对象

一般是抽象出算法的公共功能的接口或者抽象类。

3、具体策略对象

封装了具体的算法行为的对象

那么在具体实现上,大概如下:

环境上下文

设计模式之策略模式_第1张图片

策略对象

设计模式之策略模式_第2张图片

具体策略对象

设计模式之策略模式_第3张图片
设计模式之策略模式_第4张图片
设计模式之策略模式_第5张图片
设计模式之策略模式_第6张图片
设计模式之策略模式_第7张图片

策略模式的优点:

从上面的例子可以看出,上面一系列的算法在概念上来说,它们做的都是一种事情,就是计算结算信息,区别在于不一样的计算方式。使用策略模式,实现了以相同的方式调用所有的算法,减少了各种算法类与使用算法类(客户端)的之间的耦合。策略模式的一系列算法是可以相互替换的,平等的,避免了多重条件if...else if...else语句,便于维护。

策略模式的缺点:

客户端必须理解知道所有的策略类,才能决定要选用那种策略合适。策略类越多,对象的数量也就越多。

你可能感兴趣的:(设计模式之策略模式)