策略模式(Strategy)

  • 一、使用策略模式的原因
  • 二、策略模式的定义
  • 三、策略模式的使用说明
  • 四、策略模式的实现范例
  • 五、中介者模式的优点和注意事项
  • 六、策略模式的总结

一、使用策略模式的原因

在设计游戏角色伤害时,因角色差异而使用不同的计算公式,如何解决,同一计算方式分布在不同的角色中、新增角色增加维护等问题,可以使用策略模式解决。

二、策略模式的定义

GoF对策略模式的解释:定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们时能更加独立。

策略模式在处理所谓的“算法时”,着重于细节,至于计算方式及规则,则不用去理会。

三、策略模式的使用说明


参与者说明:

  • Strategy(策略接口类):提供“策略客户端”可以使用的方法。
  • ConcreteStrategyA~C(策略实现类): 不同算法的实现。
  • Context(策略客户端):拥有一个Strategy类的对象引用,并且通过对象引用获取想要的计算结果。

四、策略模式的实现范例

算法的共享接口:

     /// <summary>/// 算法的共享接口/// </summary>public abstract class Strategy{public abstract void AlgorithmInterface();}

实现各种算法:

   /*  各类算法的实现 *//// <summary>/// 算法 A/// </summary>public class ConcreteStrategyA : Strategy{public override void AlgorithmInterface(){//print}}/// <summary>/// 算法 B/// </summary>public class ConcreteStrategyB : Strategy{public override void AlgorithmInterface(){//print}}/// <summary>/// 算法 C/// </summary>public class ConcreteStrategyC : Strategy{public override void AlgorithmInterface(){//print}}

拥有Strategy对象的客户端

 /// <summary>/// 拥有Strategy 对象的客户端/// </summary>public class Context{Strategy strategy = null;/// <summary>/// 设置算法/// </summary>/// <param name="strategy"></param>public void SetStrategy(Strategy strategy){strategy = strategy;}/// <summary>///执行当前的算法/// </summary>public void ContextInterface(){strategy.AlgorithmInterface();}}

五、中介者模式的优点和注意事项

优点:

  1. 让角色属性变得好维护;
  2. 不必在针对角色类型编写程序代码;
  3. 计算公式的替换更为方便;

缺点:

  1. 计算公式时的参数设置,需要外界提供相关信息作为计算依据;
  2. 与状态模式的差别:

    都归类在行为模式(Behavior Patterns)分类下,都由一个Context类来维护对象的引用。
    差异:

    1. State是在一群状态中进行切换,状态之间有对应和连接的关系,而Strategy是由一群没有任何关系的类组成,不知彼此的存在。
    2. State受限于状态机的切换规则,在设计初期就可能定义所有状态,后期追加,不是想加入就加入,受限于现有状态关联;而Strategy是由封装计算算法而形成的一种设计模式,算法之间不存在任何依赖关系,可以随时加入。

六、策略模式的总结

将复杂的计算公式从客户端中独立出来称为一个群组,之后客户端可以按照情况来决定使用的计算公式策略,既提高系统应用的灵活程度,也强化了系统中对所有计算策略的维护方式。

后续开发人员很容易找到相关计算公式的差异,同时修改点也会缩小到计算公式本身,也不会影响到使用的客户端。

Unity 游戏设计模式 — 策略模式(Strategy)相关推荐

  1. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

  2. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  3. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  4. 设计模式--策略模式(strategy)

    1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...

  5. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  6. 趣谈设计模式 | 策略模式(Strategy):你还在使用冗长的if-else吗?

    文章目录 案例:指挥官AI 策略模式 配合工厂模式 总结 完整代码与文档 案例:指挥官AI 案例可能不符合实际逻辑,仅用于表述设计模式的思想,勿介意 假设我们开发了一款类似全面战争的即时战略游戏,为了 ...

  7. 设计模式 – 策略模式(Strategy)

    2019独角兽企业重金招聘Python工程师标准>>> 实例:商店促销 (1)首先考虑用简单工厂模式进行设计 Ø  客户端代码Main.java package com.yilong ...

  8. 设计模式 - 策略模式Strategy

    策略模式(Strategy): 定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 1 using System; 2 using System.Co ...

  9. 设计模式——策略模式( Strategy Pattern )

    写代码超过千行,自定义类10个以上,往往写着写着就觉的乱,最终决定抽空补习下设计模式方面的知识.本来AS3出了本关于设计模式的书的,国人也翻译了.我同事也早早买了一本,但前些天我借来看了几页,翻译的太 ...

最新文章

  1. 图像水平梯度和竖直梯度代码_20行代码发一篇NeurIPS:梯度共享已经不安全了
  2. 解析CI即CodeIgniter框架在Nginx下的重写规则
  3. node.js实现formdata上传文件
  4. vue axios POST请求中参数以form data和request payload形式的原因
  5. mysql中in和exists的应用场景_mysql中关于in和exists的使用
  6. Spring学习总结(21)——Spring集成阿里巴巴数据库连接池DruidDataSource配置及其常见问题汇总
  7. 在ubuntu系统下cocos2dx移植到android平台
  8. ANDROID 获得地理位置
  9. 软件工程理论与实践第二版吕云翔课后习题答案
  10. 用dataX向PolarDB中导数据时,出现脏数据问题怎么解决
  11. 唯读---图书微服务接口设计(持续更新)
  12. 栈和队列的共同处和不同处
  13. 3d渲染 计算机配置,3D渲染台式机配置
  14. c语言猜拳游戏石头剪刀布,模拟剪刀石头布猜拳游戏
  15. 我的python3.0 + RIDE搭建之路 ---全是血泪史
  16. Clickhouse第三讲-数据库引擎
  17. Ubuntu 搭建FTP文件服务器
  18. Python实战---使用正则表达式爬取古诗文网
  19. 【07月24日】北上资金持股比例排名
  20. Espressif IDF for VSCode 爬坑之路二:ESP32 的 JTAG 调试(OpenOCD GDB)

热门文章

  1. 测试内存是否够用的软件,Windows 10多大内存够用?16GB基本属于浪费!
  2. Ubuntu之Vim修改只读文件 + Ubuntu修改apt-get源
  3. 大学计算机系英语自我介绍,计算机专业英文自我介绍范文(通用5篇)
  4. DCHP 中继,攻击防范配置
  5. 如何在jsp中连接SQLserver数据库
  6. 一篇所有研究生都该读的好文:阳光温热,科研静好!
  7. 数据分析SQL库存相关计算逻辑
  8. python打印转义双引号和单引号
  9. MobaXterm文档手册
  10. 股票期货数据接口常见的代码介绍