设计模式_改进策略模式_策略模式与简单工厂模式结合(Java)
2016-09-22 20:00
399 查看
上一篇我们介绍了《设计模式_策略模式(Java)》,同时讲述了策略模式与状态模式的区别,如果仔细查看代码或者类图,我们会发现策略模式在一定程度上是存在缺陷的,Client(Test类)必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着Client必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于Client知道所有的算法或行为的情况。
这个改进版的就不放类图了,相信你可以想象出来。
测试类:
输出结果:
不打折,正常价.
有折扣,打8折.
有返现,返100.
是不是又学到了代码中的精妙之处,不禁感叹,还是要好好学习,天天向上。^_^
参考:
《大话设计模式》
http://blog.csdn.net/wulingmin21/article/details/6712684
这个改进版的就不放类图了,相信你可以想象出来。
//package com.dlut.designpattern.strategy.advanced; abstract class MarketStrategy { public abstract void discount(); } class NormalPay extends MarketStrategy{ @Override public void discount() { System.out.println("不打折,正常价."); } } class DiscountPay extends MarketStrategy{ @Override public void discount() { System.out.println("有折扣,打8折."); } } class CashBackPay extends MarketStrategy{ @Override public void discount() { System.out.println("有返现,返100."); } } class CustomContext{ //简单工厂模式,注意此处与上一篇策略模式Blog中写法的区别 //此处我们进行了解耦 public MarketStrategy consumeCash(int consume){ if(consume>=1000){ return new CashBackPay(); }else if(consume<1000 && consume>=500){ return new DiscountPay(); }else{ return new NormalPay(); } } public void pay(MarketStrategy m){ m.discount(); } }
测试类:
//package com.dlut.designpattern.strategy.advanced; public class Test { public static void main(String[] args) { CustomContext c=new CustomContext(); c.pay(c.consumeCash(100)); c.pay(c.consumeCash(600)); c.pay(c.consumeCash(1100)); } }
输出结果:
不打折,正常价.
有折扣,打8折.
有返现,返100.
是不是又学到了代码中的精妙之处,不禁感叹,还是要好好学习,天天向上。^_^
参考:
《大话设计模式》
http://blog.csdn.net/wulingmin21/article/details/6712684
相关文章推荐
- java设计模式之策略模式和简单工厂模式
- 设计模式--简单工厂模式 策略模式
- java设计模式之 策略模式
- 设计模式:策略模式的实现 c++ 与 java
- 学习设计模式之结合简单工厂,策略,装饰的计算器
- Java设计模式之策略模式
- Java 可复用的面向对象的设计模式之 工厂模式Factory详解 :简单工厂模式 工厂方法模式 抽象工厂模式
- JAVA与设计模式--之STRATEGY策略模式
- java 设计模式-策略模式
- Java设计模式 Design Pattern:策略模式 Strategy Pattern
- 设计模式——《大话设计模式》——简单工厂模式+策略模式+策略与简单工场结合
- Java中的策略设计模式
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- [设计模式] - 策略模式(Java篇)
- Java设计模式圣经连载(01)-简单工厂模式
- Java设计模式 -- 策略模式
- 设计模式学习之策略模式和简单工厂模式的区别和联系
- java设计模式-----策略模式
- java设计模式之简单工厂模式
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)