策略模式定义
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。
策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换
策略模式的组成
1、抽象策略角色(Strategy): 策略类,通常由一个接口或者抽象类实现。
2、具体策略角色(concreteStrategyA):包装了相关的算法和行为。
3、环境角色(Context):持有一个策略类的引用,最终给客户端调用。
策略模式类图
策略模式优缺点
优点:
1、 简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
缺点:
1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
2、 在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。(这本身没有解除客户端需要选择判断的压力,而策略模式与简单工厂模式结合后,选择具体实现的职责也可以由Context来承担,这就最大化的减轻了客户端的压力。)
策略模式的适用性
当存在以下情况时使用Strategy模式
1)许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。
2) 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变体实现为一个算法的类层次时 ,可以使用策略模式。
3)算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
4)一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
- 大小: 4.9 KB
分享到:
相关推荐
设计模式之禅之 工厂方法模式+策略模式 设计模式之禅之 工厂方法模式+策略模式
设计模式中的策略模式。根据《设计模式》一书编写
这是策略模式中的一个经典实例,通过鸭子问题,能让学习者更好的了解设计模式,这也是headfirst 设计模式中用的经典实例
设计模式中的策略模式,同时兼容简单工厂模式,商场收银模式,易懂可用。
55-Java设计模式之策略模式与状态模式1
走进设计模式之 策略模式(Strategy) 代码
设计模式之策略模式,简单易懂,方便自己以后忘记进行阅读
设计模式之装饰模式Java实现和UML类设计图
java设计模式之策略模式实现源码
设计模式之策略模式讲解ppt,完整代码详见:https://blog.csdn.net/sinat_35866463/article/details/89094887
设计模式 ——策略模式 实验报告 详细代码 设计概要都有
设计模式--策略模式java例子
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
设计模式之策略模式源码(C#+.NET6)
策略模式实例策略模式实例策略模式实例策略模式实例策略模式实例
Java设计模式之策略模式的详细描述
java设计模式之策略模式 内含策略模式讲解ppt 自己根据ppt写了一个小例子 先不用策略模式 后用策略模式 形成了鲜明对比 对初学者很有用
设计模式-策略模式源代码 .net,策略模式,模式,设计模式 文件包中有UML策略模式详解图