策略模式
2016-03-08 23:41
274 查看
策略模式
策略模式是一种定义一系列算法的方法* 当一些算法完成的都是相同的工作,只是实现不同,就可以用同样的方式调用所有的算法。
* 策略模式可以降低算法的使用类与算法类之间的耦合。
封装变化点是面向对象的一种很重要的思维方式。而策略模式就是封装了一系列概念上相同而实现不同的算法的变化之处。
所需的类:
Strategy 策略类(一系列算法类的抽象父类)
ConcreteStarategyA 具体算法类(继承自Strategy类)
Context 上下文类(策略对象在此类中生成)
策略模式的Strategy类为Context定义了一系列可供重用的算法或行为,使用继承可以提取出算法类的公共功能。另外,由于每一个算法类都是单独存在的,所以策略模式可以简化单元测试。在此处我们将简单工厂模式和策略模式相结合,从而使得策略对象在Context类得以生成。
代码实现:
Strategy类
[code]/** * 抽象算法类 */ public abstract class Strategy { //算法方法 public abstract void AlgorithmInterface(); }
Context类
[code]public class Context { Strategy strategy; public Context(String type){ switch (type) { case "A": strategy = new ConcreteStarategyA(); break; case "B": strategy = new ConcreteStarategyB(); break; default: break; } } //上下文接口 public void contextInterface(){ strategy.AlgorithmInterface();//根据具体的算法对象,调用其实现方法 } }
具体的算法类
[code]public class ConcreteStarategyA extends Strategy{ @Override public void AlgorithmInterface() { // TODO Auto-generated method stub //算法A的具体实现 } }
[code]public class Application { public static void main(String args[]){ //可以看出客户端只需要认识Context一个类就可以了, //相比于简单工厂模式这种(策略模式与简单工厂模式相结合)可以降低耦合度。 Context context = new Context("B"); context.contextInterface(); } }
相关文章推荐
- oracle中一些关于blob字段的操作
- Cucumber测试驱动开发
- DSA 算法
- 如何阅读他人的程序代码[转]
- hihoCoder Floyd算法
- Hadoop HA 搭建
- 0x09 文本相似性,词袋向量化
- 两份MySQL的配置
- 【程序员必备】sql语句大全
- for循环中变量i始终为length值的分析与解决
- 关于AsyncTask中的cancel方法
- nodejs-express-ejs-mongodb-mongoose 错误锦集
- codeforces 631D. Messenger kmp
- docker学习笔记5:利用commit命令创建镜像 和 删除本地镜像
- Linux学习笔记第一章
- Fragment之底层关键操作函数moveToState
- 稀疏表示与匹配追踪
- Android NDK环境搭建
- Android Studio Service 介绍
- Hibernate的单向1-N关联(三)