`

易学设计模式12 策略模式(Strategy)

阅读更多
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
分享到:
评论

相关推荐

    易学设计模式

    《易学设计模式》这本书是面向软件开发人员的一本实用指南,旨在帮助读者轻松掌握设计模式这一核心的软件工程概念。设计模式是经过时间和实践验证的解决方案,它们针对在软件设计过程中经常遇到的问题提供了一套标准...

    易学设计模式源码光盘

    例如责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者...策略模式(Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    易学_设计模式_郭志学

    《易学_设计模式_郭志学》是针对Java编程领域的一本专注于设计模式的书籍。设计模式是软件工程中的重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。这些模式代表了在特定上下文中...

    一个Java书籍《易学设计模式》全部源码.rar

    《Java易学设计模式》全书的随书源码,每一个章节一个压缩包,分别为:工厂模式、命令模式、组合模式、模板方法模式、工厂方法模式例子、状态模式例子、迭代器模式、解释器模式、享元模式、桥模式、装饰模式、代理...

    《易学设计模式》源码

    《易学设计模式》源码是一份珍贵的学习资源,它基于JAVA语言,为读者提供了书中讲解的各种设计模式的实际实现。设计模式是软件工程中的重要概念,它们是解决常见问题的可复用解决方案,有助于提高代码的可读性、可...

    [源代码] 《易学 设计模式》 随书源代码

    第19章 明修栈道,暗度陈仓:策略模式 (Strategy) 第20章 循序渐进:职责链模式 (ChainofResponsibility) 第21章 独具匠心:命令模式 (Command) 第22章 步调一致:访问者模式 (Visitor) 第23章 左右逢源:调停者模式...

    java-易学设计模式

    3. 行为型模式:这类模式涉及对象之间的责任分配,比如策略模式(Strategy)定义了算法族,分别封装起来,让它们之间可以互相替换;模板方法模式(Template Method)定义了操作中的算法骨架,而将一些步骤延迟到子类...

    设计模式例子文档,简单易学

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者...策略模式(Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    Java《易学设计模式》随书源码.rar

    Java《易学设计模式》随书源代码,书中介绍了多种JAva模式的方法和使用,比如简单工厂模式、工厂方法模式例子、状态模式例子、迭代器模式、解释器模式、命令模式、模板方法模式、享元模式、桥模式、代理模式、适配器...

    介绍设计模式的代码

    在“易学设计模式代码”这个压缩包中,你将找到这些模式的Java实现示例。通过阅读和分析这些代码,你可以更好地理解每种模式的核心思想,以及如何在实际项目中应用它们。同时,虽然这里的示例是基于Java,但设计模式...

    avascript设计模式.pdf

    JavaScript的设计理念是简洁易学,即便是编程新手也能用它编写实用的代码。随着程序员技能的提升,JavaScript的能力也在增长,可以帮助编写更加复杂和高效的程序。它能够模仿其他编程语言的模式和惯例,同时形成了...

    Java《易学设计模式》全书源代码

    摘要:Java源码,书籍源码,随书源码,设计模式,Java电子书 运行环境:Java/Eclipse

    精通python设计模式

    本书涵盖了多种经典的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、策略模式、代理模式等。单例模式确保一个类只有一个实例,常用于配置管理或线程控制;工厂模式提供了一种创建对象的最佳方式,避免了...

    head first 设计模式(中文版) part3 总共三部分

    资源比较大,只好分来传输,否则传不上去。设计模式中的经典书籍,强烈建议看这本书来学习设计模式。gof的设计模式太抽象了,这本书非常易学。

    Python常用设计模式源码

    Python作为一门易读、易学的编程语言,也广泛应用了各种设计模式。本资源“Python常用设计模式源码”包含了一些在Python编程中常见的设计模式实现。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。...

    boaPHP是一款灵活易用的配置式PHP框架,MVC设计模式,完全面向对象,易学易用、便于快速开发

    boaPHP是一款免费开源、灵活易用的配置式PHP框架,MVC设计模式,完全面向对象,易学易用、便于快速开发

    Java设计模式(经典版)

    该文档通过通俗易懂的描述外加代码实现的方式来讲述java的23中设计模式,简单易学。

    head first 设计模式(中文版) part1 总共三部分

    资源比较大,只好分来传输,否则传不上去。设计模式中的经典书籍,强烈建议看这本书来学习设计模式。gof的设计模式太抽象了,这本书非常易学。

Global site tag (gtag.js) - Google Analytics