1. 什么是策略模式?
策略模式针对的是在不同的环境中,客户端选择使用不同的策略。
2. 为什么使用策略模式?
当增加一种新的算法的时候,只需要在客户端登记即可。相当于“可插入的算法”。扩展性更好。
3. 什么时候使用策略模式?
如果一个系统需要动态的从几种算法中选择一种算法。则使用策略模式。
4. 策略模式在java中的应用
比如说 awt包中的Container提供了不同的排列方式,BorderLayout , FlowLayout,BirdLayout等。
我的理解,是有一个策略类【包括实现了该策略的具本类】以及注册了相应策略的具体实现类,如果策略需要做变动则只需改变实现策略的代码,而无需修注册了该策略的客户端
Example: 移动短信有两种策略:全球通用户和 神州行用户 不同用户扣费标准不同
1. 策略接口
public interface ISMSStrategy { //做一件事情,扣钱 public void deductMoney(User user); }
2. 全球通策略实现类
public class GSMSMSStrategy implements ISMSStrategy{ //全球通-100块钱 public void deductMoney(User user){ System.out.println("全球通执行策略以前"+user.getMoney()); user.setMoney(user.getMoney()-200); System.out.println("全球通执行策略以后"+user.getMoney()); } }
3. 神州行实现类
public class EasyownStrategy implements ISMSStrategy{ //神州行用户-200 public void deductMoney(User user) { System.out.println("神州行执行策略以前"+user.getMoney()); user.setMoney(user.getMoney()-100); System.out.println("神州行执行策略以后"+user.getMoney()); } }
4. 定义一个用户实体
public class User { public int money; /*实现策略模式的重点在这里*/ public ISMSStrategy smsStrategy;//该用户 办理的业务套餐 public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } public ISMSStrategy getSmsStrategy() { return smsStrategy; } public void setSmsStrategy(ISMSStrategy smsStrategy) { this.smsStrategy = smsStrategy; } }
5. 再定义一个结算器
public class Balance { //月末结算了 public void deductMoney(User user){ user.getSmsStrategy().deductMoney(user); } }
6. 程序入口
public class Main { public static void main(String[] args) { Balance balance = new Balance(); //定义 一个神州行的用户 ISMSStrategy easyownStrategy = new EasyownStrategy(); User easyownUser = new User(); easyownUser.setMoney(1000); //办理了一个神州行短信套餐 easyownUser.setSmsStrategy(easyownStrategy); System.err.println("神州行的用户到了月末结算的时候"); //到了月末结算 balance.deductMoney(easyownUser); // 定义 一个全球通的用户 ISMSStrategy GSMStrategy = new GSMSMSStrategy(); User gsmUser = new User(); gsmUser.setMoney(1000); // 办理了一个全球通短信套餐 gsmUser.setSmsStrategy(GSMStrategy); System.err.println("全球通的用户到了月末结算的时候"); // 到了月末结算 balance.deductMoney(gsmUser); } }
整套代码实现了是一个策略模式的完整实现
如果哪天全球通的资费需要做修改,只需要修改GSMSMSStrategy类里面的deductMoney(User user)方法,User类是不用修改的
我也是初学,HY批评指正,共同进步
参考源文档 <http://blog.csdn.net/hu_xinxin/article/details/9209677> ,此处致谢
相关推荐
1.当你有很多类似的类,但它们执行某些行为的方式不同时,请使用此 2.使用该模式将类的业务逻辑与算法的实现细节隔离开来,这些算法在 3.当你的类具有大量的条件运
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
设计模式中的策略模式。根据《设计模式》一书编写
这是策略模式中的一个经典实例,通过鸭子问题,能让学习者更好的了解设计模式,这也是headfirst 设计模式中用的经典实例
设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...
策略模式.rar策略模式.rar策略模式.rar
设计模式中的策略模式,同时兼容简单工厂模式,商场收银模式,易懂可用。
33.设计模式之策略模式 34.设计模式之命令模式 35.设计模式之迭代器模式 36.设计模式之中介者模式 37.设计模式之享元模式 38.设计模式之职责链模式 39.设计模式之适配器模式 40.设计模式之组合模式 41.设计模式之...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象...4.行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
55-Java设计模式之策略模式与状态模式1
走进设计模式之 策略模式(Strategy) 代码
JavaScript 设计模式之策略模式.zip
设计模式之策略模式,简单易懂,方便自己以后忘记进行阅读
文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...
javascript设计模式之策略模式.docx
设计模式之策略模式课件.pptx
策略模式 共享模式词汇的威力 我如何使用设计模式? 设计箱内的工具 习题解答 2 让你的对象知悉现况 气象观测站 认识观察者模式 出版者+订阅者=观罕者模式 五分钟短剧:观察主题 定义观察者...
设计模式之装饰模式Java实现和UML类设计图
C++设计模式课件4_策略模式.pdf