行为型模式——策略模式
2018-03-26 21:12
141 查看
概述
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
介绍
意图
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决
在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用
一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决
将这些算法封装成一个一个的类,任意地替换。关键代码
实现同一个接口应用实例
诸葛亮的锦囊妙计,每一个锦囊就是一个策略旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略
JAVA AWT 中的 LayoutManager
优点
算法可以自由切换避免使用多重条件判断
扩展性良好。
缺点
策略类会增多所有策略类都需要对外暴露
使用场景
如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为一个系统需要动态地在几种算法中选择一种
如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
注意事项
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。Demo
我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。
创建一个接口
Strategy.javapublic interface Strategy { public int doOperation(int num1, int num2); }
创建实现接口的实体类
OperationAdd.javapublic class OperationAdd implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 + num2; } }
OperationSubstract.java
public class OperationSubstract implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 - num2; } }
OperationMultiply.java
public class OperationMultiply implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 * num2; } }
创建 Context 类
Context.javapublic class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(int num1, int num2){ return strategy.doOperation(num1, num2); } }
使用 Context 来查看当它改变策略 Strategy 时的行为变化
StrategyPatternDemo.javapublic class StrategyPatternDemo { public static void main(String[] args) { Context context = new Context(new OperationAdd()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationSubstract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); } }
验证输出
10 + 5 = 15 10 - 5 = 5 10 * 5 = 5
0
相关文章推荐
- 设计模式(十三)策略模式(Strategy)-行为型
- java-行为型模式-策略设计模式
- 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 设计模式笔记 22. Strategy 策略模式(行为型模式)
- 行为型模式--策略模式(Strategy)
- 设计模式--行为型-Strategy(策略)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- “设计模式”学习之九:策略、模板方法与访问者(行为型)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- java设计模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,。 行为型模式,共十一种:策略模式、模板方法)
- 行为型设计模式-策略模式
- java设计模式之行为型模式-策略模式
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 策略模式(Strategy) - Java实现
- Strategy 策略(行为型模式)--学习笔记
- 设计模式-行为型模式-策略模式
- 设计模式【1】-对象行为型-策略模式
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
- 设计模式之行为型模式---策略模式
- 设计模式:Strategy 策略模式 -- 行为型