java设计模式——策略者模式(strategy)
来源:互联网 发布:铜掌柜理财安全吗 知乎 编辑:程序博客网 时间:2024/05/01 02:12
今天学习了策略者模式,在此做下学习笔记,有什么问题请大家帮忙指出来,不胜感激,谢谢~
策略者模式(Strategy)是一种定义一系列算法的方法。从概念上来看,所有这些算法完成的都是 相同的工作,只是实现不同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合[DPE] 策略者模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出 这些算法中的公共功能[DP]。
当不同的行为放在一个类时,该类就包含了很多不同的算法,就需要要if或者switch语句来选择适应的行为,因此,策略者模式选择将这不同算法的类封装为不同的类,每一个算法对应一个类来消除分支判断,这样可以提高系统的维护。
就商场收银系统来说,需要有很多种情况,有时候商场要做活动打折,有时候是满100送10,有时候是满一百送100积分等等一系列情况,为了避免大量的判断需要把各种不同的算法放在各自不同的类。“策略者模式封装了变化”——策略者模式就是用来封装算法的,但是在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
uml图如下:
示例代码如下:
StrategyDemo主类:
public class StrategyDemo { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here //每件物品打7.5折 final double rad=0.75; final double price = 123; CashContext cnt = new CashContext(new CashRebate(rad)); System.out.println("打完折后的价钱是:"+cnt.AlgrothmCash(price)); }}
CashSuper接口public interface CashSuper { public double GetCash(double price);//定义获取做完活动后的价格}//以下是不同的活动CashNormal类public class CashNormal implements CashSuper{ @Override public double GetCash(double price) { //没做活动,返回原来值 return price; } }CashRebate类:public class CashRebate implements CashSuper{//打折活动 private double radio; public CashRebate(double rad) { radio = rad; } @Override public double GetCash(double price) { return radio*price; }}CashReturn类:public class CashReturn implements CashSuper{ private int ShoppingCash; private int ReturnCash; //现金返还,满几百返还几百 public CashReturn(int ShoppingCash,int ReturnCash) { this.ReturnCash = ReturnCash; this.ShoppingCash = ShoppingCash; } @Override public double GetCash(double price) { if(price>=ShoppingCash) { price -= ReturnCash; } return price; } }CashContext类,来调用对应的对象CashContext类:public class CashContext { CashSuper Cash; public CashContext(CashSuper cashSuper) { Cash = cashSuper; } public double AlgrothmCash(double price) { return Cash.GetCash(price); }}想想策略模式与简单工厂模式有什么不同呢?仔细的比对了一下,发现策略模式降低了耦合度,封装得更彻底,只需要知道CashContext类就可以了,而简单工厂模式则相对耦合度要比策略模式高。
- java设计模式——策略者模式(strategy)
- JAVA设计模式—策略模式(Strategy)
- java设计模式13——策略模式(Strategy)
- Java设计模式——策略模式(Strategy Pattern)
- Java设计模式——策略模式(Strategy Pattern)
- Java设计模式 —— 策略(Strategy)
- Java设计模式——策略(Strategy)
- Java设计模式—— 策略(Strategy)
- java 设计模式--策略模式(strategy)
- Java设计模式----策略模式(Strategy)
- Java设计模式——策略模式[Strategy Pattern]
- Java设计模式——策略模式【Strategy Pattern】
- java设计模式——策略模式(Strategy Pattern)
- 通俗易懂java设计模式——策略模式(Strategy)
- JAVA设计模式(13) —<行为型>策略模式(strategy)
- 设计模式——策略模式(Strategy)
- 设计模式——Strategy策略模式
- JAVA设计模式---策略(strategy)
- Drupal 当中,处理视频的经验总结
- 处理对象的多种状态及其相互转换——状态模式(三)
- hive中UDF、UDAF和UDTF使用
- NDK Build 用法(NDK Build)
- 【翻译】what every programmer should know about time
- java设计模式——策略者模式(strategy)
- Struts2+Jdbc登录样例
- SQLServer2005如何批量修改架构名
- linux建立yum下载源
- UITableViewCell的重绘机制导致的列状态问题
- 创建一个普通的应用程序窗口
- CSS文件编码格式要和html文件的编码格式一样 才不会出现中文注释所带来的问题
- 使用CAS实现的非阻塞计数器
- setContentView和inflate区别