一、你真的懂策略模式吗?
策略模式:
1、它定义了算法的家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
2、例如:在上一篇的设计模式中,商场收银时如何促销,用打折还是返利,其实都是一些算法,用工厂来生成算法对象,这没有错。但是算法本身是一种策略,最重要的是这些算法是随时都可能互相替换的,这就是变化点,而封装变化点就是我们面向对象的一种很重要的思维方式。
二、策略模式的结构图和基本代码如下
1、Context:定义了上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
2、ConcreateStrategyA,ConcreateStrategyB,ConcreateStrategyC三个类是具体的策略类,封装了具体的算法或者行为。继承于Strategy。
3、具体的代码如下:
三、基于设计模式二的代码用策略模式的实现如下:
1、改造的思路如下:
CashSuper:抽象策略类,CashNormal:正常收费类,CashRebate:打折收费类,CashReturn:返利收费类,CashContext:收费的上下文对象
代码结构图如下:
2、代码如下:
上下文代码如下:
客户端代码如下:
3、上面代码的缺点如下:
上面的代码还是在客户端来判断用哪一个算法了,代码臃肿。
所以解决方法把客户端代码拆开。采用策略模式+工厂模式的结合,下次分享。
今天先到这了~~