策略模式
2019-05-24 07:11
1746 查看
策略模式封装的是算法,而状态模式侧重的对象状态的转变。
/** * 策略,定义计算报价算法的接口 */ public interface Strategy { /** * 计算应报的价格 * @param goodsPrice 商品销售原价 * @return 计算出来的,应该给客户报的价格 */ 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 = null; /** * 构造方法,传入一个具体的策略对象 * @param aStrategy 具体的策略对象 */ public Price(Strategy aStrategy){ this.strategy = aStrategy; } /** * 报价,计算对客户的报价 * @param goodsPrice 商品销售原价 * @return 计算出来的,应该给客户报的价格 */ public double quote(double goodsPrice){ return this.strategy.calcPrice(goodsPrice); } }
客户端调用:
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); } }
(adsbygoogle = window.adsbygoogle || []).push({});
相关文章推荐
- 策略模式
- 状态模式&策略模式
- JAVA-策略设计模式
- 设计模式之策略模式
- 策略模式
- JAVA设计模式笔记之策略模式
- 策略设计模式:父类持有接口成员变量,动态设定接口成员实现类,动态改变方法
- 策略模式
- 设计模式深入浅出-----策略模式(Strategy Pattern)
- 设计模式之策略模式
- 策略模式心得趣谈
- 设计模式之策略模式(Strategy)摘录
- 从头认识设计模式-策略模式-07-对策略模式的总结
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- JAVA设计模式之 策略模式【Strategy Pattern】
- 【设计模式】策略模式
- B4:策略模式 Strategy
- 设计模式之策略模式在设计一群鸭子中的应用
- 《JAVA与模式》之策略模式