策略模式意图将解决问题的算法分别封装成一个个对象的形式,并使这些算法对象相互间可被替换。模式比较简单,对于策略对象结构的设计,可抽象一个抽象基类,并定义好相关算法(纯)虚接口,并由各种具体的实现算法子类实现即可。因此模式的类关系结构图参考如下:

模式编码结构参考如下:

 namespace strategy
{
class IAbstractStrategy
{
public:
// some code here........
virtual void executeAlgorithm() = ; };//class IAbstractStrategy class ConcreteStrategy1 : public IAbstractStrategy
{
public:
// some code here........
virtual void executeAlgorithm() override {
// some code here........
// execute real algorithm code.
// some code here........
} };//class ConcreteStrategy1 class ConcreteStrategy2 : public IAbstractStrategy
{
public:
// some code here........
virtual void executeAlgorithm() override {
// some code here........
// execute real algorithm code.
// some code here........
} };//class ConcreteStrategy2 class Context
{
public:
// some code here........
void doSomething(IAbstractStrategy* pStrategy) {
// e.g
if (nullptr != pStrategy) {
pStrategy->executeAlgorithm();
}
} }; }//namespace strategy

Strategy模式编码结构参考

策略模式主要是在当一个问题的解存在不止一种方案并且这些解有可能随时被替换相互替换的情况下使用。如游戏中的角色的目标选择方案就可考虑使用策略模式。如游戏中的角色技能也可考虑使用策略模式,同一角色当前正在使用普通技能,过会就可能使用法术技能等等。在这些情况下使用策略模式是挺方便的,比较后期想有了新的具体实现策略时,不需要对应用的逻辑结构进行调整,只需要新扩展一个具体实现策略即可。

在编码实现上,设计人员可能需要考虑数据信息如何传递给对应的策略对象中,此时可能需要视具体的环境而定。一种可参考的方案可将策略所需的数据信息骑过参数形式传入。这种方案对于不同的具体实现策略对象来说,却并不一定全都有用。甚至有时为了某个特别的具体实现策略对象来说,需要的参数很多,于是在抽象类上就将所有参数都列入。可实际上,这些参数中的绝对大多数却有可能对其他的那些具体实现策略来说,是完全没有用的。并且后期如果扩展新的实现策略的话,则有可能会影响整个策略类系的接口重新调整。第二种可参考的方案是直接将上下文对象作为参数传入。该方案对于策略类系来说,结构比较稳定,并且任何一个新的或旧的具体实现策略都可以取到它们自己所需要的数据信息。但是这种情况下,势必要求上下文对象必需开放过多的(甚至是)不必要的接口出来。这样就无形当中破坏了封装性。

【行为型】Strategy模式的更多相关文章

  1. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...

  2. Java设计模式(18)策略模式(Strategy模式)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...

  3. Java 实现策略(Strategy)模式

    策略模式:行为型模式 将同一行为,不同的处理算法分别封装起来.让它们之间能够互相替换 1. 定义一个超类型接口,及 行为方法 2. 定义不同的实现类,实现该行为的 不同的算法 /** * 策略模式:针 ...

  4. 敏捷软件开发(4)--- TEMPLATE METHOD & STRATEGY 模式

    1.TEMPLATE METHOD 泛型,也就是这个模式,是可以基于泛型的. 我们往往会有一些算法,比如排序算法.它的算法部分,我可以把它放在一个基类里面,这样具体类型的比较可以放在子类里面. 看如下 ...

  5. Template Method模式和Strategy模式[继承与委托]

    继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...

  6. Strategy 模式

    可以看到 Strategy 模式和 Template 模式解决了类似的问题,也正如在 Template 模式中分析的,Strategy模式和 Template 模式实际是实现一个抽象接口的两种方式:继 ...

  7. C++设计模式---Strategy模式

    一.前言 学习的第一个设计模式!不知道理解的对不对,期望大家一起多交流~ Strategy模式:策略模式,定义了算法族,分别封装起来,此模式可以让算法的变化独立于使用算法的客户.Strategy模式将 ...

  8. 设计模式之Singleton模式和Strategy模式是什么

    Singleton模式 单例模式,也交单子模式,有时候系统只需要拥有一个全局对象. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方 ...

  9. 设计模式之——浅谈strategy模式(策略模式)

    strategy模式,即策略模式.个人觉得吧,策略模式更多的是一种思维方式. 首先我们要知道,为什么需要策略模式.举个例子,比如用程序输出今天下午去玩什么. PlayGame 玩游戏 package ...

随机推荐

  1. Jenkins 一: 环境安装以及配置

    安装JDK 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择的JDK版本和开发使用的JDK版本最好 ...

  2. 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结

    2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...

  3. Ueditor 1.4.3 jsp utf-8版图片上传问题

  4. 422. Valid Word Square

    似乎可以沿着对角线往右往下检查,也可以正常按题设检查. 我用的后者.. public class Solution { public boolean validWordSquare(List<S ...

  5. 双系统如何正确的使用修复BCD工具分享

    安装双系统时候,用于种种原因会导致开机启动只显示一个系统,此时需要修复下BCD即可. 下面介绍下两个修复BCD工具软件: 1.easybcd(双系统引导修复工具) v2.2.0.182 汉化版 下载地 ...

  6. Android设置虚线、圆角、渐变

    有图又真相,先上图再说. 点击效果: 设置虚线: <?xml version="1.0" encoding="utf-8"?> <shape  ...

  7. java中的泛型(转)

    什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...

  8. Android Studio学习随笔-模拟耗时操作(sleep)

    在这里我申明一点,因为我是挂着VPN去YOUTOBE看的尚学堂的高明鑫老师讲的Android基础学习视频,有些东西他没有讲,而我也没办法,只能等两个星期后学校请老师来的时候进行询问,当然我也会将一些问 ...

  9. python增删改查

    ###增删改查 names = ["zhangding","wangxu","wudong","cheng"] #增na ...

  10. Android 中Webview 自适应屏幕

    随笔 - 478  文章 - 3  评论 - 113 Android 中Webview 自适应屏幕   webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomCon ...