设计模式-5.策略模式
来源:互联网 发布:pythonr 网络爬虫 编辑:程序博客网 时间:2024/06/04 23:27
1.什么是策略模式:
定义一组算法,将每个算法都封装起来,并且他们之间可以互换。
策略模式使这些算法在客户端调用他们的时候能够互不影响地变化
策略模式体现两个非常基本的面向对象设计的原则:
1.封装变化的概念
2.编程中使用接口,而不是对接口的实现
**************************************************************************************
策略模式的组成
抽象策略角色:策略类,通常是一个接口或者抽象类实现
具体策略角色:包装了相关的算法和行为
环境角色:持有一个策略类的引用,最终给客户端调用
策略模式的实现步骤
1.对策略对象定义一个公共接口。
2.编写策略类,该类实现公共接口。
3.在使用策略对象的类中保存一个对策略对象的引用。
4.在使用策略对象的类中,实现对策略对象的set和get方法或使用构造方法完成赋值。
缺点:
1.客户端必须知道所有的策略类,并决定使用哪个策略类
2.造成很多策略类
解决方法:使用工厂方法
****************************************************************************************
抽象角色:
public interface Strategy{public int calculate(int a, int b);}
两个具体抽象角色:
//定义加法功能public class AddStrategy implements Strategy{public int calculate(int a, int b){return a + b;}}
//定义除法角色public class DivStrategy implements Strategy{@Overridepublic int calculate(int a, int b){// TODO Auto-generated method stubreturn a / b;}}
环境角色:
public class Environment{private Strategy strategy;public Environment(Strategy strategy){this.strategy = strategy;}public void setStrategy(Strategy strategy){this.strategy = strategy;}public Strategy getStrategy(Strategy strategy){return this.strategy;}public int calculate(int a, int b){return strategy.calculate(a, b);}}测试类:
public class Client{public static void main(String[] args){ //设置加法策略 AddStrategy addStrategy = new AddStrategy();//通过加法构造环境角色Environment environment = new Environment(addStrategy);//System.out.println(environment.calculate(3, 4));DivStrategy divStrategy = new DivStrategy();Environment environment2 = new Environment(divStrategy);System.out.println(environment2.calculate(3, 1)); //environment通过调用setStrategy,改变策略 environment.setStrategy(divStrategy); System.out.println(environment.calculate(2, 2)); }}这里单纯看System.out.println(environment.calculate(2,3))无法判断执行什么策略,完全依靠传入的策略模式。
0 0
- 设计模式-5.策略模式
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- Intellij IDEA 配置使用github时的问题
- Unity API(一)Unity中的脚本事件及其函数
- 二分图匹配—匈牙利算法
- FZU 2218 Simple String Problem (状压dp)
- itoo在线编辑——mongo学习1
- 设计模式-5.策略模式
- MAC OS 中创建虚拟环境virtualenv,并在其中安装Web框架
- UVa Live3026
- 嵌入式内核开发:led灯驱动
- 树结构练习——判断给定森林中有多少棵树
- FFMPEG开发过程中的相关术语
- java积累——apache commons fileupload 实现文件上传
- 2016华为软件精英挑战赛总结
- Retrofit 2.X使用详解之请求头