策略模式接口方法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版,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!
在给定的“策略模式代码实现”中,我们可能看到的是一个Visual Studio 2008(VS2008)工程源码,它提供了策略模式的示例。`template_test.sln`是Visual Studio的解决方案文件,包含了项目的所有配置信息。而`...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及接口或抽象类的实现,允许程序在运行时选择并应用不同的算法或策略。这种模式的核心在于将算法封装到独立的可互换的策略中...
在上述代码示例中,我们看到首先定义了一个名为Strategy的接口,该接口中有一个名为computePrice的方法,用于计算价格。随后定义了三个实现了Strategy接口的类,分别是GeneralMember、MiddleMember和HighMember,...
书中“二十三种设计模式代码示例”可能涵盖了以下全部或部分设计模式: - 单例模式(Singleton) - 工厂模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 建造者模式(Builder) - 适配器模式(Adapter...
策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,我们将详细介绍如何使用策略模式在...
这个"java策略模式示例.zip"文件显然是为了帮助初学者更好地理解和应用这一模式。 首先,我们要理解策略模式的核心概念。策略模式定义了算法族,分别封装起来,让它们之间可以互相替换。此模式让算法的变化独立于...
在可运行代码中,可能包含桥接模式和策略模式的示例实现,通过阅读和理解这些代码,可以帮助你更好地掌握这两种模式的用法和应用场景。 总的来说,桥接模式和策略模式都是为了提高代码的灵活性和可维护性,但它们...
通过学习这个代码示例,你可以了解到如何在实际项目中应用生成器模式,理解其优点,如提高代码可读性、灵活性和可维护性。此外,还可以学习到如何通过导演类来控制构建过程,实现不同的构建策略,以适应不断变化的...
在提供的"template与strategy模式"压缩包中,可能包含了使用这两种模式的Java代码示例。这些示例通常会展示如何定义抽象模板类、模板方法、策略接口、具体策略类以及上下文类的实现。通过查看这些示例,你可以更深入...
在这个"cas代理模式代码示例"中,我们关注的是如何在CAS环境中实现这一模式。 1、**实现代理模式的相关配置**: 在Java中,我们可以使用静态代理或者动态代理(如Java的`java.lang.reflect.Proxy`类)来实现。静态...
而策略模式则提供了灵活的算法选择,使得代码更易于扩展和维护。理解并熟练运用这些设计模式,能够显著提升我们的编程技能和软件质量。在实际项目中,我们应根据需求选择合适的设计模式,以实现高效、可维护的代码。
例如,在"深入浅出设计模式(C#版)--策略模式--示例代码"中,可能会有一个`IDuck`接口,它定义了飞、叫等基本行为。然后有多个具体的鸭子类型,如`MallardDuck`、`RedheadDuck`等,每个类型可能有不同的飞行和叫声...
策略模式提供了一种灵活的方式来处理这种变化,使得代码更加模块化,易于扩展和维护。 在策略模式中,有三个主要角色: 1. **策略接口(Strategy Interface)**:定义了所有支持的算法的公共接口,这样任何实现了这...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。...通过阅读和分析这些代码,你将深入理解策略模式在实际开发中的应用和优势。
15. **策略模式**:定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。在.NET中,它可以用于实现动态策略选择,比如排序算法的切换。 16. **模版方法模式**:定义一个操作中的算法骨架,而将一些步骤...
10. 策略模式:定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。 以上只是设计模式中的一部分,"大话模式源代码示例"涵盖的28个实例将覆盖更多的模式,如命令模式、职责...