java 设计模式 学习笔记(4) 策略模式
来源:互联网 发布:mac 终端命令大全 编辑:程序博客网 时间:2024/05/16 14:47
策略模式是一种定义一系列算法的方法,从概念上来看,所有的这些方法完成的都是相同的工作,只是实现不同。
它可以以相同的方式调用所有算法,减少了各种算法类和使用算法的类之间的耦合。
为什么要使用策略模式中的Context 类?
对于前面的三种工厂设计模式,如果用工厂来创建实例,并通过实例调用给实例类中的方法来实现功能。而使用了Context类,通过将 具体的算法类 注入到Context 构造函数中,并在Context 自身的函数中来调用 注入到构造函数中的 具体算法类的特定方法。也就是说,用户代码只是选择了一个具体的算法类并注入到 Context 对象中,然后通过操作 Context 类,来实现需要的功能,避免了用户代码直接操作 具体的算法类。
1. 定义一个 Strategy 接口,该接口为Context 定义了一个 calculate() 方法,并交给其实现类来具体实现。
public interface Strategy { public int calculate(int numA, int numB); }
2. 建立一个实现Strategy 接口的 AddStrategy 类,实现calculate 方法,返回 numA和numB 的和值
3. 再建立一个实现Strategy 接口的 multiStrategy类,实现calculate 方法,返回 numA和numB 的乘积。
4. 建立一个 Context 类 ,该类用来保存 Strategy 实现类的引用,并在自己的方法中调用 实现类的calculate 方法,
5. 建立一个TestStrategy 类,来验证实验结果
输出结果为 :
AddStrategy result : 9 multiStrategy result : 20 从实验验证过程中可以看到传给了 Context 不同的Strategy 实现类,最后输出的结果就不同。但是我们知道,对numA 和numB 做的运算式发生在 Strategy 类中,因此,我们可以得出 由于Context 类得存在对 用户隐藏了运算细节,等于说Context 在 Strategy 实现类的外面又包了一层。 “策略模式还有一个优点 是 简化了 但单元测试, 因为每个算法都有自己的类,可以通过自己的接口单独测试 ” 从AddStrategy 的代码中,我们确实可以看到,这个类包含了一个 calculate() 方法,因此,可以在单元测试里,直接 new AddStrategy().calculate(3,4) 并观察结果来判断该类的实现是否正确。
- java 设计模式 学习笔记(4) 策略模式
- java/android 设计模式学习笔记(17)---策略模式
- java 设计模式学习笔记十五 strategy 策略设计模式
- java设计模式学习笔记2 策略模式
- java设计模式学习笔记之策略模式
- 学习笔记——JAVA设计模式<18>策略模式
- 策略设计模式--学习笔记
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记:策略模式
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记七:策略模式
- 设计模式学习笔记--策略模式
- 设计模式学习笔记-策略模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记(一):策略模式
- 如何面对英语!!!!!!!
- 天有多高,海有多深
- 两个patch进了linus’ tree
- OpenGL学习笔记 (6) —— 纹理映射
- 考生号考场号座位号的编排方法
- java 设计模式 学习笔记(4) 策略模式
- ubuntu linuxqq_v1.0.2_i386.tar.gz 安装方法
- QtQuick 与 C++ 的结合
- 如何不用循环判断一个数是否为2的幂
- Inline Hook 之(监视任意函数)
- 近期开发技术整理总结
- 寻求ACM-ICPC方面的东东
- C++的一些细节
- kqueue example