linkin大话设计模式--策略模式
来源:互联网 发布:凑数小软件 编辑:程序博客网 时间:2024/05/17 22:53
linkin大话设计模式--策略模式
Strategy [ˈstrætədʒi]
策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种算法,或者让Context来为客户端提供一个最佳的算法。说白了,使用策略模式就是为了支持算法的自由切换。
策略模式是对算法的包装,是吧使用算法的责任和算法本身分割开来,委派给不同的对象管理。
策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。
一句话来形容:准备一组算法,并将每一个算法封装起来,使得他们可以互换。
策略模式涉及到三个角色:
环境角色:持有一个Strategy类(策略类)的引用
抽象策略角色:策略类,通常由一个接口或者抽象类实现
具体策略角色:包装了相关的算法和行为
代码如下:
//显示客户端 根据不同的策略选择 会有不能的实现算法来处理逻辑public class Strategy { private DiscountStrategy strategy; public void setStrategy(DiscountStrategy strategy) { this.strategy = strategy; } public double getDiscountPrice(double price){ if(null == strategy){ strategy = new VipDiscount(); } return this.strategy.getDiscount(price); } public static void main(String[] args) { //这里的策略就可以在客户端随意修改和增加 //这里的客户端代码和不同的策略类耦合,我们可以考虑使用配置文件在指定Strategy到底使用哪种策略实现类 这样子其实就是hibernate的dialect... Strategy strategy = new Strategy(); System.out.println(strategy.getDiscountPrice(100)); strategy.setStrategy(new OldDiscount()); System.out.println(strategy.getDiscountPrice(100)); strategy.setStrategy(new NewDiscount()); System.out.println(strategy.getDiscountPrice(100)); }}//算法的接口interface DiscountStrategy{ public double getDiscount(double price);}//下面几个是算法接口的实现 要是增加一个算法就增加一个实现就好 还是比较方便的class VipDiscount implements DiscountStrategy{ @Override public double getDiscount(double price) { System.out.println("VIP折扣..."); return price*0.5; } }class OldDiscount implements DiscountStrategy{ @Override public double getDiscount(double price) { System.out.println("老顾客折扣..."); return price*0.7; } }class NewDiscount implements DiscountStrategy{ @Override public double getDiscount(double price) { System.out.println("新顾客折扣..."); return price*0.9; } }
0 0
- linkin大话设计模式--策略模式
- linkin大话设计模式--单例模式
- linkin大话设计模式--代理模式
- linkin大话设计模式--命令模式
- linkin大话设计模式--门面模式
- linkin大话设计模式--桥接模式
- linkin大话设计模式--观察者模式
- linkin大话设计模式--模板方法模式
- linkin大话设计模式--建造模式
- linkin大话设计模式--适配器模式
- linkin大话设计模式--常用模式总结
- linkin大话设计模式--简单工厂
- linkin大话设计模式--抽象工厂
- 大话设计模式-策略模式
- 大话设计模式-策略模式
- 大话设计模式:策略模式
- 大话设计模式-策略模式
- 大话设计模式-策略模式
- 如何使用QSignalMapper
- HDU 1113 Word Amalgamation (map 容器 + string容器)
- hdu 5033 单调栈的维护
- opencv程序四:图像二值化
- 实验室第三周工作报告
- linkin大话设计模式--策略模式
- 浅拷贝与深拷贝
- VS2010 MySQ连接问题小结
- 服务器 libevent源码深度剖析一
- 归档
- iOS 8使用Touch ID进行身份认证
- ibus anthy--日语输入法
- 无线路由器桥接终极完美教程
- KMP算法C++ 实现