Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。
定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略实现定义的算法。
ConcreteStrategy:具体的策略实现,也就是具体的算法实现。
Context:上下文,负责和具体的策略类交互,通常上下文会持有一个真正的策略实现
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
策略模式比较经典的例子:报价管理
对不同的客户要报不同的价格,向客户报价是非常复杂的,因此在一些CRM(客户关系管理)的系统中,会有一个单独的报价管理模块,来处理复杂的报价功能。
为了演示的简洁性,假定现在需要实现一个简化的报价管理,实现如下的功能:
(1)对普通客户或者是新客户报全价
(2)对老客户报的价格,统一折扣5%
(3)对大客户报的价格,统一折扣10%
public interface Strategy {
public double calcPrice(double goodsPrice);
}
public class NormalCustomerStrategy implements Strategy {
public double calcPrice(double goodsPrice) {
System.out.println("对于新客户或者是普通客户,没有折扣");
return goodsPrice;
}
}
public class OldCustomerStrategy implements Strategy {
public double calcPrice(double goodsPrice) {
System.out.println("对于老客户,统一折扣5%");
return goodsPrice * (1 - 0.05);
}
}
public class LargeCustomerStrategy implements Strategy {
public double calcPrice(double goodsPrice) {
System.out.println("对于大客户,统一折扣10%");
return goodsPrice * (1-0.1);
}
}
public class Price {
private Strategy strategy;
public Price(Strategy strategy) {
this.strategy = strategy;
}
public double quote(double goodsPrice) {
return strategy.calcPrice(goodsPrice);
}
}
public class Client {
public static void main(String[] args) {
Strategy strategy = new LargeCustomerStrategy ();
Price ctx = new Price(strategy);
double quote = ctx.quote(1000);
System.out.println("向客户报价:"+quote);
strategy = new OldCustomerStrategy();
ctx = new Price(strategy);
quote = ctx.quote(1000);
System.out.println("向客户报价:"+quote);
}
}
输出结果:
对于大客户,统一折扣10%
向客户报价:900.0
对于老客户,统一折扣5%
向客户报价:950.0
参考:http://blog.csdn.net/csh624366188/article/details/7470579

- 大小: 21.5 KB
分享到:
相关推荐
"易学设计模式源码光盘" 提供了一种直观的学习方式,帮助初学者更轻松地理解和应用这些模式。这里我们将深入探讨设计模式的核心理念、主要分类以及一些常见设计模式的实现细节。 首先,设计模式的出现源于对软件...
### 易学设计模式知识点详解 #### 一、设计模式概览 设计模式是一种软件设计中的通用解决方案,它描述了一种在特定情境下用来解决问题的重复出现的设计结构。设计模式可以帮助开发者更好地理解如何构建可扩展、可...
《易学 设计模式》 郭志学 编著 随书源代码 ☆ 章节清单:☆ 第01章 欲速则不达:了解设计模式 第02章 磨刀不误砍柴工:UML语言概述 第03章 术业有专攻:简单工厂模式 (SimpleFactory) 第04章 精益求精:工厂方法...
"java-易学设计模式"这个压缩包很可能是包含了一些关于Java设计模式的示例源代码,方便学习者理解和掌握。 首先,我们来讨论一下设计模式的基本分类。设计模式分为三类:创建型模式、结构型模式和行为型模式。 1. ...
这份名为"设计模式例子文档,简单易学"的资源,显然是为了帮助开发者更直观、更快速地理解和应用设计模式。设计模式并非具体的代码或库,而是一种通用的解决方案模板,可以在不同的软件开发过程中复用,以提高代码的...
在“易学设计模式代码”这个压缩包中,你将找到这些模式的Java实现示例。通过阅读和分析这些代码,你可以更好地理解每种模式的核心思想,以及如何在实际项目中应用它们。同时,虽然这里的示例是基于Java,但设计模式...
本书深入探讨了工厂模式(Factory Pattern)、单例模式(Singleton Pattern)、观察者模式(Observer Pattern)、策略模式(Strategy Pattern)等在PHP中的应用。这些模式帮助开发者以更标准化的方式编写代码,确保...
这个“PHP策略游戏引擎”是一个专门为开发策略类游戏设计的开源项目,它允许开发者创建具有复杂逻辑和交互的游戏环境。服务器列表功能是此类游戏的关键组成部分,它管理着玩家之间的互动、数据同步以及游戏状态的...