`
xvnan
  • 浏览: 4393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

策略模式代码示例

 
阅读更多

策略模式接口方法Strategy.java

package com.dcone.pattern.strategy;

/**
 * <p>Title: 接口 Strategy.java</p>
 * <p>Description: 
 *	<pre>
 *		 策略,定义计算报价算法的接口
 *	</pre>
 * </p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public interface Strategy {

	/**
	 * 计算应报的价格
	 * 
	 * @param goodsPrice 商品销售原价
	 * @return	计算出来的,应该给客户报的价格
	 * @since 2012-8-27
	 */
	public double calcPrice(double goodsPrice);
}

具体实现算法。

一般客户商品价格实现算法NormalCustomerStrategy.java

package com.dcone.pattern.strategy;

/**
 * <p>Title: 普通用户算法实现 NormalCustomerStrategy.java</p>
 * <p>Description: 
 *	<pre>
 *		具体算法实现,为新客户或者是普通客户计算应报的价格.
 *	</pre>
 * </p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public class NormalCustomerStrategy implements Strategy {
	@Override
	public double calcPrice(double goodsPrice) {
		System.out.println("对于新客户或者是普通客户,没有折扣");
		return goodsPrice;
	}
}

 老客户商品价格实现算法OldCustomerStrategy.java

 

package com.dcone.pattern.strategy;

/**
 * <p>Title: 老客户户算法实现 OldCustomerStrategy.java</p>
 * <p>Description: 
 *	<pre>
 *		具体算法实现,为老客户计算应报的价格
 *	</pre>
 * </p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public class OldCustomerStrategy implements Strategy {
	@Override
	public double calcPrice(double goodsPrice) {
		System.out.println("对于老客户,统一折扣5%");
		return goodsPrice * (1-0.05);
	}
}

 大客户商品价格实现算法LargeCustomerStrategy.java

package com.dcone.pattern.strategy;

/**
 * <p>Title: 大客户户算法实现 LargeCustomerStrategy.java</p>
 * <p>Description: 
 *	<pre>
 *		具体算法实现,为大客户计算应报的价格
 *	</pre>
 * </p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public class LargeCustomerStrategy implements Strategy {
	@Override
	public double calcPrice(double goodsPrice) {
		System.out.println("对于大客户,统一折扣10%");
		return goodsPrice * (1-0.1);
	}
}

价格管理Price.java

package com.dcone.pattern.strategy;

/**
 * <p>Title: 价格管理类 Price.java</p>
 * <p>Description: 
 *	<pre>
 *		价格管理,主要完成计算向客户所报价格的功能
 *	</pre>
 * </p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public class Price {

	/**
	 * 持有一个具体的策略对象
	 */
	private Strategy strategy = null;

	/**
	 * 构造方法,传入一个具体的策略对象
	 * 
	 * @param strategy	具体的策略对象
	 */
	public Price(Strategy strategy) {
		this.strategy = strategy;
	}
	
	/**
	 * 报价,计算对客户的报价
	 * 
	 * @param goodsPrice	商品销售原价
	 * @return		计算出来的,应该给客户报的价
	 * @since 2012-8-27
	 */
	public double quote(double goodsPrice) {
		return this.strategy.calcPrice(goodsPrice);
	}
}

测试类

package com.dcone.pattern.strategy;

/**
 * <p>Title: 测试类</p>
 * <p>Copyright: Copyright(c) 2012</p>
 * <p>Company: 神州数码</p>
 *
 * @author 徐楠
 * @version 1.0
 * @since 2012-8-27
 */
public class Client {
	public static void main(String[] args) {
		//1:选择并创建需要使用的策略对象
	    Strategy strategy = new LargeCustomerStrategy ();
	    //2:创建上下文
	    Price ctx = new Price(strategy);
	    //3:计算报价
	    double quote = ctx.quote(1000);
	    System.out.println("向客户报价:"+quote);
	}
}

测试结果:

对于大客户,统一折扣10%
向客户报价:900.0 

 

分享到:
评论

相关推荐

    Java版策略模式代码示例

    策略模式是一种常用的设计模式,它定义了一系列算法,并将每个算法封装起来让它们可以互换使用,算法的变化不会...附件是Java版策略模式代码示例,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    策略模式代码示例 Java版本

    策略模式是一种常用的设计模式,它定义了一系列算法,并将每个算法封装起来让它们可以互换使用,算法的变化...附件是策略模式代码示例 Java版本,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    策略模式代码示例 Java版

    策略模式是一种常用的设计模式,它定义了一系列算法,并将每个算法封装起来让它们可以互换使用,算法的变化不会...附件是策略模式代码示例 Java版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    策略模式代码实现

    在给定的“策略模式代码实现”中,我们可能看到的是一个Visual Studio 2008(VS2008)工程源码,它提供了策略模式的示例。`template_test.sln`是Visual Studio的解决方案文件,包含了项目的所有配置信息。而`...

    策略模式的示例代码和思想模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及接口或抽象类的实现,允许程序在运行时选择并应用不同的算法或策略。这种模式的核心在于将算法封装到独立的可互换的策略中...

    PHP实现的策略模式简单示例

    在上述代码示例中,我们看到首先定义了一个名为Strategy的接口,该接口中有一个名为computePrice的方法,用于计算价格。随后定义了三个实现了Strategy接口的类,分别是GeneralMember、MiddleMember和HighMember,...

    C#经典设计模式及代码示例

    书中“二十三种设计模式代码示例”可能涵盖了以下全部或部分设计模式: - 单例模式(Singleton) - 工厂模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 建造者模式(Builder) - 适配器模式(Adapter...

    详解SpringBoot结合策略模式实战套路

    策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,我们将详细介绍如何使用策略模式在...

    java策略模式示例.zip

    这个"java策略模式示例.zip"文件显然是为了帮助初学者更好地理解和应用这一模式。 首先,我们要理解策略模式的核心概念。策略模式定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于...

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    在可运行代码中,可能包含桥接模式和策略模式的示例实现,通过阅读和理解这些代码,可以帮助你更好地掌握这两种模式的用法和应用场景。 总的来说,桥接模式和策略模式都是为了提高代码的灵活性和可维护性,但它们...

    生成器模式代码示例

    通过学习这个代码示例,你可以了解到如何在实际项目中应用生成器模式,理解其优点,如提高代码可读性、灵活性和可维护性。此外,还可以学习到如何通过导演类来控制构建过程,实现不同的构建策略,以适应不断变化的...

    7.java模板模式与8.策略模式示例

    在提供的"template与strategy模式"压缩包中,可能包含了使用这两种模式的Java代码示例。这些示例通常会展示如何定义抽象模板类、模板方法、策略接口、具体策略类以及上下文类的实现。通过查看这些示例,你可以更深入...

    cas代理模式代码示例

    在这个"cas代理模式代码示例"中,我们关注的是如何在CAS环境中实现这一模式。 1、**实现代理模式的相关配置**: 在Java中,我们可以使用静态代理或者动态代理(如Java的`java.lang.reflect.Proxy`类)来实现。静态...

    单例和策略模式示例

    而策略模式则提供了灵活的算法选择,使得代码更易于扩展和维护。理解并熟练运用这些设计模式,能够显著提升我们的编程技能和软件质量。在实际项目中,我们应根据需求选择合适的设计模式,以实现高效、可维护的代码。

    深入浅出设计模式(C#版)--策略模式--示例代码

    例如,在"深入浅出设计模式(C#版)--策略模式--示例代码"中,可能会有一个`IDuck`接口,它定义了飞、叫等基本行为。然后有多个具体的鸭子类型,如`MallardDuck`、`RedheadDuck`等,每个类型可能有不同的飞行和叫声...

    策略模式示例

    策略模式提供了一种灵活的方式来处理这种变化,使得代码更加模块化,易于扩展和维护。 在策略模式中,有三个主要角色: 1. **策略接口(Strategy Interface)**:定义了所有支持的算法的公共接口,这样任何实现了这...

    策略模式案例源码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。...通过阅读和分析这些代码,你将深入理解策略模式在实际开发中的应用和优势。

    设计模式最全的示例代码

    15. **策略模式**:定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。在.NET中,它可以用于实现动态策略选择,比如排序算法的切换。 16. **模版方法模式**:定义一个操作中的算法骨架,而将一些步骤...

    大话模式源代码示例

    10. 策略模式:定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。 以上只是设计模式中的一部分,"大话模式源代码示例"涵盖的28个实例将覆盖更多的模式,如命令模式、职责...

Global site tag (gtag.js) - Google Analytics