设计模式GOF23——策略模式
2016-08-13 21:11
471 查看
策略模式(strategy),是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。
策略模式的注入有构造方法注入,set方法注入(其实也可以写其他方法注入),也能用配置文件注入,如果有框架支持,也可以像spring那样有注释注入。不同的注入对于不同的调用方法。
Spring框架黄总,Resource接口,资源访问策略
Java,servlet.http.HttpServlet#service()
模式的职责
一些情况中,可能对具体选用那个方式,要根据实际情况来确定。这个时候,可以采用策略模式。模式的必要性
其实这种情况用简单的if,else就可以实现了,那么为什么还要有策略模式呢?因为如果只是简单的if,else的话,对于比较复杂的逻辑会难以管理和维护,如果要新增类型也需要频繁修改同一段代码,不符合开闭原则。模式的实现
//策略的 抽象 public interface Strategy { double finalprice(double price); } //策略的具体实现 class NormalClient implements Strategy{ public double finalprice(double price) { //普通用户的算法 return price; } } //策略的具体实现 class VipClient implements Strategy{ public double finalprice(double price) { //普通Vip用户的算法 return price*0.95; } } //策略的具体实现 class SuperVipClient implements Strategy{ public double finalprice(double price) { //超级Vip用户的算法 return price*0.85; } } //负责具体的策略类交互 //这样的话,具体的算法和直接调用的客户端就可以实现分离,使得算法可以独立于客户端独立的变化 public class Context { //需要调用的策略的对象,需要注入 private Strategy strategy; //方法一:构造函数注入 public Context(Strategy strategy){ super(); this.strategy = strategy; } //方法二:set函数注入 public void setStrategy(Strategy strategy){ this.strategy = strategy; } //其实也可以使用配置未见的注入方式,这里就不做例子了 //调用策略对象的方法 public void price(double price){ //只要有对象.方法就可以了 System.out.println(""+strategy.finalprice(price)); } } //客户端调用 public class Client { public static void main(String[] args) { //创建策略的对象 Strategy s = new NormalClient(); //创建策略调用的对象(这里用的注入方式是构造方法注入,代码中的其他注入方法也可以实现) Context c = new Context(s); c.price(998); } }
策略模式的注入有构造方法注入,set方法注入(其实也可以写其他方法注入),也能用配置文件注入,如果有框架支持,也可以像spring那样有注释注入。不同的注入对于不同的调用方法。
模式的本质
分离算法,选择实现模式的实现的场景
JAVASE中GUI编程中,布局管理Spring框架黄总,Resource接口,资源访问策略
Java,servlet.http.HttpServlet#service()
相关文章推荐
- GOF23设计模式之策略模式与实现
- 【GOF23设计模式】策略模式
- 【GOF23设计模式】_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构JAVA248
- [转]笔记--设计模式精解c++-GoF 23 种设计模式解析
- GOF 23设计模式的Visio版UML图
- GoF23种设计模式之行为型模式之策略模式
- GOF23设计模式之动态代理模式实现之经典
- <转载> 设计模式精解c++-GoF 23 种设计模式解析
- 设计模式GOF23之单例模式理解
- 设计模式GOF23之单例模式效率测试与反射和反序列化问题的解决
- GOF23设计模式之原型模式之实现
- 设计模式GOF23之单例模式实现
- 23个GOF23设计模式的定义
- 笔记--设计模式精解c++-GoF 23 种设计模式解析
- GOF 24种设计模式-策略模式
- [导入]C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式.zip(8.00 MB)
- GOF23设计模式简介
- 设计模式——23、策略模式剖析及在集合框架中的应用
- 23个GOF23设计模式的定义
- GOF23设计模式之组合模式的理解