【新朋友】点击标题下面(↑)蓝色字“Java那些事”关注 【老朋友】点击右上角,转发或分享本页面内容
Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family ofalgorithms,encapsulates each one,and makes them interchangeable. Strategy letsthe algorithm vary independently from clients that use it.) 角色: Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略实现定义的算法。 ConcreteStrategy:具体的策略实现,也就是具体的算法实现。 Context:上下文,负责和具体的策略类交互,通常上下文会持有一个真正的策略实现,上下文还可以让具体的策略类来获取上下文的数据,甚至让具体的策略类来回调上下文的方法。 策略模式的结构示意图如图1所示: 应用场景: 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。 3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。 优点: 1、 简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。 4.提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。 缺点: 举一个我看过的策略模式比较经典的例子:报价管理对不同的客户要报不同的价格,向客户报价是非常复杂的,因此在一些CRM(客户关系管理)的系统中,会有一个单独的报价管理模块,来处理复杂的报价功能。 为了演示的简洁性,假定现在需要实现一个简化的报价管理,实现如下的功能: (1)对普通客户或者是新客户报全价 (2)对老客户报的价格,统一折扣5% (3)对大客户报的价格,统一折扣10% (1)先看策略接口,示例代码如下: [java] view plaincopyprint?
(2)接下来看看具体的算法实现,不同的算法,实现也不一样,先看为新客户或者是普通客户计算应报的价格的实现,示例代码如下: [java] view plaincopyprint?
再看看为老客户计算应报的价格的实现,示例代码如下: [java] view plaincopyprint?
再看看为大客户计算应报的价格的实现,示例代码如下: [java] view plaincopyprint?
(3)接下来看看上下文的实现,也就是原来的价格类,它的变化比较大,主要有:
示例代码如下: [java] view plaincopyprint?
(4)写个客户端来测试运行一下,好加深体会,示例代码如下: [html] view plaincopyprint?
本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 下一篇写: Java程序员从笨鸟到菜鸟之(三十四)大话设计模式(五)创建者模式和原型模式本文转载自:微信公众账号 - java那些事,版权归原作者所有! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|