设计模式学习-策略模式
2018-03-18 11:25
609 查看
什么是策略模式:策略模式将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现并使他们可以相互替换,从而导致客户端程序独立于算法的改变。
策略模式的实现
1、通过分离变化得出的策略接口Strategy
2、Strategy的实现类
3、客户程序“有一个”Strategy
4、在客户程序中选择/组装正确的Strategy实现
策略模式的优点
1、使用了组合,使框架更加灵活
2、富有弹性,可以较好的应对变化(开闭原则)
3、更好的代码复用性(相对于继承)
4、消除大量的条件语句
策略模式的缺点
1、客户代码需要了解每个策略实现的细节
2、增加了对象的数目
策略模式的适用场景
1、许多相关的类仅仅是行为差异
2、运行时选取不同的算法变体
3、运行条件语句在多个分支中选取一
实现我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。
还是以简易计算器为例子/**
*
*/
package simplefactory.study.factory;
/**
* @author Byp
*
*/
public interface Operation {
// 获得计算结果
public double getresult(double numberA, double numberB);
}
策略模式的实现
1、通过分离变化得出的策略接口Strategy
2、Strategy的实现类
3、客户程序“有一个”Strategy
4、在客户程序中选择/组装正确的Strategy实现
策略模式的优点
1、使用了组合,使框架更加灵活
2、富有弹性,可以较好的应对变化(开闭原则)
3、更好的代码复用性(相对于继承)
4、消除大量的条件语句
策略模式的缺点
1、客户代码需要了解每个策略实现的细节
2、增加了对象的数目
策略模式的适用场景
1、许多相关的类仅仅是行为差异
2、运行时选取不同的算法变体
3、运行条件语句在多个分支中选取一
实现我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。
还是以简易计算器为例子/**
*
*/
package simplefactory.study.factory;
/**
* @author Byp
*
*/
public interface Operation {
// 获得计算结果
public double getresult(double numberA, double numberB);
}
package simplefactory.study.factory; public class OperateSub implements Operation { @Override public double getresult(double numberA, double numberB) { double result=numberA-numberB; return result; } }
package simplefactory.study.factory; public class OperateAdd implements Operation { @Override public double getresult(double numberA, double numberB) { double resule = numberA+numberB; return resule; } }
package simplefactory.study.factory; public class Context { private Operation operation; public Context(Operation operation) { this.operation = operation; } public double result(double numberA, double numberB) { return operation.getresult(numberA, numberB); } }
package simplefactory.study.factory; public class Test { public static void main(String[] args) { Context context = new Context(new OperateAdd()); System.out.println(context.result(14, 17)); } }策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方法调用所有的算法,减少了各种算法类与使用算法类之间的耦合。策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于取出这些算法中的公共功能,另外策略模式还简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
相关文章推荐
- 学习设计模式-----策略模式
- HeadFirst 设计模式学习笔记1--策略模式
- C++设计模式学习之策略模式
- 设计模式学习笔记(一):策略模式
- 设计模式学习笔记(一):策略模式
- 学习JavaScript设计模式(策略模式)
- 设计模式学习笔记--策略模式
- 学习php设计模式 php实现策略模式(strategy)
- java设计模式学习之策略模式
- 设计模式学习之简单工厂模式和策略模式
- IOS设计模式学习(19)策略
- 设计模式学习(一)之策略模式
- 设计模式(二)学习----策略模式
- 设计模式学习(简单工厂、策略模式、单一职责、开闭原则)
- 【笨鸟先飞】Java重新学习日记14--设计模式之策略模式
- java设计模式学习笔记之策略模式
- 设计模式 学习笔记 之 策略模式 Strategy(4)
- 设计模式学习笔记(四):策略模式【Strategy】
- 设计模式学习总结-策略模式(Strategy Pattern)
- 设计模式学习—策略模式(Strategy Design Pattern)