设计模式:策略模式
2019-01-21 02:40:45来源:博客园 阅读 ()
什么是策略模式
策略是我们在处理问题是所采用的步骤方法。如我要过年回家,方式有飞机、火车,汽车等,这几种方式就是策略。
再比如我们商城要搞一个活动,给用户生成一批优惠券,5折,7折,免单等,这些方法也是策略。
一个策略模式的例子:
模拟一个销售给客户报价的业务场景。我们销售人员对不同的客户制定不同的报价。
普通客户----不打折
一星客户----9折
二星客户----8折
三星客户--- 7折
如果不采用策略模式大概处理方式如下:
public double getPrice(String type, double price){ if(type.equals("普通客户")){ System.out.println("不打折,原价"); return price; }else if(type.equals(“一星客户")){ return price*0.9; }else if(type.equals(“二星客户")){ return price*0.8; }else if(type.equals(“三星客户")){ return price*0.7; } return price; }
简单粗暴,非常容易。但一但类型较多,业务处理复杂,流程长时,或者要增加业务时,整个代码控制会难以维护。
采用策略模式能将这类问题很好处理,将每个分支问题都生成一个业务子类,具体用哪个子类就根据业务选择。
采用策略模式:
/** * 抽象策略对象 */ public interface Stratgey { double getPrice(double price); }
/** * 普通客户 不打折 */ public class NewCustomerStrategy implements Stratgey { @Override public double getPrice(double price) { System.out.println("普通客户不打折"); return price; } }
/** * 一级客户 9折 */ public class LeaveOneCustomerStrategy implements Stratgey { @Override public double getPrice(double price) { System.out.println("一级客户9折"); return price; } }
/** * 二级客户8折 */ public class LeaveTwoCustomerStrategy implements Stratgey { @Override public double getPrice(double price) { System.out.println("二级客户8折"); return price; } }
/** * 三级客户7折 */ public class LeaveThreeCustomerStrategy implements Stratgey { @Override public double getPrice(double price) { System.out.println("三级客户7折"); return price; } }
再来一个管理策略对象的类
/** * 负责和具体策略类交互 *实现算法和客户端分离 */ public class Context { //当前的策略对象 private Stratgey stratge; public Context(Stratgey stratge) { this.stratge = stratge; } public void printPrice(double s){ stratge.getPrice(s); } }
public class Client {
public static void main(String[] args) {
//不同的策略
Stratgey stratge = new NewCustomerStrategy();
Stratgey one = new LeaveOneCustomerStrategy();
Stratgey two = new LeaveTwoCustomerStrategy();
Stratgey three = new LeaveThreeCustomerStrategy();
//注入具体的策略
Context context1 = new Context(stratge);
context1.printPrice(998);
Context context2 = new Context(one);
context2.printPrice(998);
Context context3 = new Context(two);
context3.printPrice(998);
}
}
当对应不同的客户时,就注入不同的销售策略。
策略模式将不同的算法封装成一个对象,这些不同的算法从一个抽象类或者一个接口中派生出来,客户端持有一个抽象的策略的引用,这样客户端就能动态的切换不同的策略。
和工厂模式区别在于策略模式自己实现业务处理过程,工厂模式在于所有业务交由工厂方法处理。
原文链接:https://www.cnblogs.com/gcm688/p/10289804.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 如何干掉 if else 策略+工厂 2020-06-11
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash