设计模式之策略模式
2016-03-06 16:56
134 查看
设计模式之策略模式
其次定义封装了具体算法或行为接口实现类ABC
接着定义一个Context上下文,用一个具体的ConcreteStrategy来配置,维护一个对Strategy对象的引用
最后就是定义Test测试类了
大功告成了么?
是不是觉得怪怪的?
此时程序又变成了很早之前的套路,也就是在客户端去判断用什么算法。那么有什么方法将判断转移出去呢?
此时判断便从客户端转移出去了
初学《设计模式》
什么是策略模式?
策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。UML
下面用具体代码来解释该模式
首先定义所有支持的算法的公共接口,Strategy接口package strategy; public interface Strategy { void algorithmInterface(); }
其次定义封装了具体算法或行为接口实现类ABC
package strategy; public class ConcreteStrategyA implements Strategy { @Override public void algorithmInterface() { // TODO Auto-generated method stub System.out.println("A"); } }
package strategy; public class ConcreteStrategyB implements Strategy { @Override public void algorithmInterface() { // TODO Auto-generated method stub System.out.println("B"); } }
package strategy; public class ConcreteStrategyC implements Strategy { @Override public void algorithmInterface() { // TODO Auto-generated method stub System.out.println("C"); } }
接着定义一个Context上下文,用一个具体的ConcreteStrategy来配置,维护一个对Strategy对象的引用
package strategy; public class Context { Strategy strategy; public Context(Strategy strategy) { // TODO Auto-generated constructor stub this.strategy=strategy; } public void contextInterface() { strategy.algorithmInterface(); } }
最后就是定义Test测试类了
package strategy; public class Test { public static void main(String[] args) { Context contextA=new Context(new ConcreteStrategyA()); contextA.contextInterface(); Context contextB=new Context(new ConcreteStrategyB()); contextB.contextInterface(); Context contextC=new Context(new ConcreteStrategyC()); contextC.contextInterface(); } }
大功告成了么?
是不是觉得怪怪的?
此时程序又变成了很早之前的套路,也就是在客户端去判断用什么算法。那么有什么方法将判断转移出去呢?
下面将其与简单工厂模式进行结合
改造Context类package strategy; public class ContextUpdate { Strategy strategy; public ContextUpdate(String type) { // TODO Auto-generated constructor stub switch (type) { case "A": strategy =new ConcreteStrategyA(); break; case "B": strategy =new ConcreteStrategyB(); break; default: strategy =new ConcreteStrategyC(); break; } } public void concreteStrategy() { strategy.algorithmInterface(); } }
此时判断便从客户端转移出去了
初学《设计模式》
相关文章推荐
- centos下安装redis
- jmeter switch controller
- 线性表(顺序表,链表的表示和实现)
- 二叉树
- 合并两个递增排序的链表
- 自动生成30道四则元算题目
- iOS 后台任务处理(多任务)
- PHP 的ini配置文件的读写操作函数
- 《编写高质量代码:改善C++程序的150个建议》读书笔记6
- uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型c++/c? (在andriod源码中)
- SpringMVC中的controller默认是单例的原因
- 第二周:一个简单的时间片轮转多道程序内核代码及分析
- PHP 通过fsockopen函数获取远程网页源码
- JUnit三分钟教程
- hadoop之IOUtils是否需要关闭流?
- PHP 中文汉字转换成拼音函数
- 内存泄漏以及常见的解决方法
- 你认为一些军事方面的软件系统采用什么样的开发模型比较合适?
- vector的size_type
- 广义表