stategy设计模式
??????? 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要报不同的价格,比如:
??????? 甚至在不同的阶段,对客户的报价也不同,一般情况是刚开始比较高,越接近成交阶段,报价越趋于合理。
??????? 总之,向客户报价是非常复杂的,因此在一些CRM(客户关系管理)的系统中,会有一个单独的报价管理模块,来处理复杂的报价功能。
??????? 为了演示的简洁性,假定现在需要实现一个简化的报价管理,实现如下的功能:
?????????? (1)对普通客户或者是新客户报全价
?????????? (2)对老客户报的价格,统一折扣5%
?????????? (3)对大客户报的价格,统一折扣10%
??????? 该怎么实现呢?
??????? 要实现对不同的人员报不同的价格的功能,无外乎就是判断起来麻烦点,也不多难,很快就有朋友能写出如下的实现代码,示例代码如下:
图1? 策略模式结构示意图
Strategy:
??????? 策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略实现定义的算法。
ConcreteStrategy:
??????? 具体的策略实现,也就是具体的算法实现。
Context:
??????? 上下文,负责和具体的策略类交互,通常上下文会持有一个真正的策略实现,上下文还可以让具体的策略类来获取上下文的数据,甚至让具体的策略类来回调上下文的方法。
(1)首先来看策略,也就是定义算法的接口,示例代码如下:
?图2? 使用策略模式实现示例的结构示意图
(1)先看策略接口,示例代码如下:
margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; line-height: normal; text-align