Java技术常用的设计模式(一)--- 策略模式
来源:互联网 发布:祖龙娱乐 知乎 编辑:程序博客网 时间:2024/05/18 12:29
1 策略模式概述
策略模式是用来封装变化的。
同一个功能可由多个算法进行实现(或代码,不同的业务使用不同的处理方式)。
当不同的行为都放在一个类中的时候,就需要使用条件语句if-else-switch来进行选择。
但是策略模式是可以将这些不同的行为封装在独立的Strategy类中,再编写一个Context类来选择对Strategy对象的引用。
这样就可以根据客户端的选择,在不同时间应用不同的业务。
2 策略模式结构
组成:
- 抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
- 具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。
- 环境类Context:用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
3 代码实现:
为了便于理解思想,下面的代码实现较为简单。
1)定义一个抽象Strategy类,声明一个算法:
public abstract class Travel { public abstract void travelWay();}
2)具体的策略类:
TravelWithAir :
public class TravelWithAir extends Travel { @Override public void travelWay() { System.out.println("用坐飞机的方式去旅行。。。"); }}
TravelWithRun :
public class TravelWithRun extends Travel{ @Override public void travelWay() { System.out.println("用跑步的方式去旅行。。。"); }}
TravelWithTrain :
public class TravelWithTrain extends Travel{ @Override public void travelWay() { System.out.println("用坐火车的方式去旅行。。。"); }}
3)环境类Context:根据用户的选择选择不同的实现算法。
public class TravelContext { Travel travel = null; public TravelContext(String type){ switch(type){ case "run" : travel = new TravelWithRun(); break; case "air" : travel = new TravelWithAir(); break; case "train" : travel = new TravelWithTrain(); break; } } public void getTravelWays(){ travel.travelWay(); }}
4)测试:
public class Main { public static void main(String[] args) { //模拟用户选择 String select = "run"; TravelContext context = new TravelContext(select); context.getTravelWays(); select = "air"; context = new TravelContext(select); context.getTravelWays(); select = "train"; context = new TravelContext(select); context.getTravelWays(); }}
4 Spring中策略模式的实现
在Spring中有多个地方使用到策略模式,如Aop中代理对象的创建就使用到了策略模式。
如上图:
AopProxy接口就代表抽象策略类;
Cglib2AopProxy 和 JdkDynamicAopProxy 代表两种策略的实现方式;
ProxyFactoryBean 代表 Context,根据所要代理的类是类还是接口来选择是使用JDK代理方式 还是 CGLIB方式。
参考:《深入分析Java Web技术内幕》
- Java技术常用的设计模式(一)--- 策略模式
- Java设计模式(一) 策略模式
- java设计模式(一)-策略模式
- 常用的Java设计模式(一)
- java设计模式一策略模式
- java设计模式:一、策略模式
- java 常用设计模式-策略模式(strategy)
- java设计模式(一)—策略模式
- Java设计模式之策略模式(一)
- Java设计模式透析--策略模式(一)
- java设计模式学习之(一)策略模式
- 最常用的设计模式-----策略模式(C++实现)
- 一些常用的设计模式(策略模式)
- 六种常用的设计模式java实现(六)策略模式
- 设计模式一:java设计模式之策略模式(一)
- 设计模式(一)Strategy - 策略模式
- 设计模式(一)策略模式
- 设计模式之策略模式(一)
- 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti
- 2017-8-16
- 胡思乱想之保险
- maven 笔记
- Java技术常用的设计模式(一)--- 策略模式
- 键盘码、ASCII码表
- 多线程交替打印ABC的多种实现方法
- memcache的介绍,应用场景,优缺点和常见问题
- YOLO的安装与学习
- Python+selenium
- 对象、对象引用、实例
- 【理论实践】用alignas代替#pragma pack
- PHP根据经纬度获取地址信息