文章目录

  • 策略模式
    • 结构
    • 实现
    • 应用场景
    • 优缺点
    • 与其他模式的区别

策略模式

策略模式是一种对象行为型模式。该模式定义一系列算法,将其封装起来,使这些算法在完成特定任务时,可以相互替换。 通过一个情景类,将其算法实现和业务逻辑分离,动态的切换不同的算法进行管理。

策略模式在生活中也十分常见,如出行的方式,当需要到达一个目的地时,我们需要一个方式去实现,骑车,坐公交等,它们都是实现了同一个任务,但实现的方式截然不同。在程序中,排序是非常常见的,不同的排序方式有不同的特定(如快排,归排,堆排等),通过不同的场景,我们可以灵活的选择这些排序。

结构


说明

  • 抽象策略(IStrategy)- 声明算法的通用接口,将算法实现委派给子类。
  • 具体策略(Concrete Strategy)- 实现具体算法。
  • 情景(Context)- 依赖策略引用,不实现功能,负责调用策略接口的方法。

算法本身需要具备独立性

实现

例子:场景切换(Scene Switching)

场景切换(抽象策略)

    public interface ISceneSwitch{void SceneSwitch();}

切换算法(具体策略)

 //褪色切换public class FadeSwitch : ISceneSwitch{public void SceneSwitch(){Debug.Log("Scene Fade Switch");}}//圆型切换public class CircularSwitch : ISceneSwitch{public void SceneSwitch(){Debug.Log("Circular Scene Switch");}}

场景(情景)

    public class Scene{private ISceneSwitch _sceneSwitch;public ISceneSwitch SceneSwitch{set => _sceneSwitch = value;}public Scene(ISceneSwitch sceneSwitch){_sceneSwitch = sceneSwitch;}public void SceneSwitching(){_sceneSwitch.SceneSwitch();}}

调用

    public class StrategyExample : MonoBehaviour{private void Start(){Scene scene = new Scene(new FadeSwitch());scene.SceneSwitching();scene.SceneSwitch = new CircularSwitch();scene.SceneSwitching();}}

应用场景

  • 客户端需要动态切换算法时,且不同算法实现一个特定任务
  • 当使用大量的条件分支语句来执行任务时,我们可以使用策略模式
  • 算法本身需要与业务逻辑分离,且算法实现不依赖上下文

优缺点

优点

  • 避免使用多重分支语句,如if…else,switch…case等,代码更简洁。
  • 满足开闭原则,在扩展新算法时,无需更改客户端代码。
  • 将业务逻辑和算法实现分离

缺点

  • 使系统更复杂
  • 客户端本身需要明白不同策略算法之间的区别

与其他模式的区别

  • 桥接策略 十分相似,且都是将任务委托给引用对象,但本质却不同,桥接注重将功能分离,通过抽象化类对各个实现化引用进行交互,来完成对应功能,本质是将各个功能组合成一个大的结构,且思想主要是通过组合的方式来替代继承完成抽象和实现的分离。策略模式注重的只有一个,那就是算法在运行中可以相互切换,且互不干扰,算法的实现和业务逻辑分离
  • 模板方法策略 都是对算法不同实现。但思路不同,模板方法本身是在一个算法骨架上,对特定步骤进行重写,算法本身是有顺序的。而策略的算法实现,则可以完全不同,只要完成了特定任务即可。模板方法是类继承,而策略是对象组合。模板方法算法是静态的,而策略算法是动态的。
  • 状态策略 都是运行时的功能切换。状态的功能切换,主要是状态改变使得功能的切换,策略则是主动切换。状态没有明确功能实现和状态切换的分离,可以和策略模式配合,实现实现和切换的分离。

策略模式 - Unity相关推荐

  1. Unity 游戏设计模式 — 策略模式(Strategy)

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

  2. 接口进阶:接口子类实例化和策略模式

    文章目录 几种类型的实例化 示例生成CS 0501: 实例化场景 策略模式案例 设计谜题 几种类型的实例化 抽象类 - 不可以直接实例化 同样纯抽象类 - 接口,也不可以直接实例化 使用虚方法的类(有 ...

  3. 游戏设计模式之策略模式(二)

    今天来讲一下策略模式. 在我们进行游戏开发的时候,总避免不了改动自己的算法.特别是你做完一个功能之后,策划跑来跟你说,我觉得我们还可以加一个功能(这个功能跟前一个功能类似),第一次过来跟你说要加,那自 ...

  4. 【Design pattern】简单工厂过渡策略模式

    把自己当做小菜来跟学<大话设计模式>,跟着故事的思路来走 简单工厂模式:实现一个计算器代码 策略模式:商场打折代码 根据大鸟和小菜的故事,一步步的完善问题的过程!

  5. 设计模式 之美 -- 策略模式

    策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换.对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户. 基本的UML类图如下: 用户使用S ...

  6. 设计模式之策略模式(Strategy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. Java中的策略模式实例教程

    策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...

  8. else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...

  9. C++模式学习------策略模式

    当遇到同一个对象有不同的行为,方法,为管理这些方法可使用策略模式. 策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来.通常把一个系列的算法包装到一系列的策略类里面,这些类继承一个抽象的 ...

最新文章

  1. 打工人,今年双十一你刷啥?
  2. linux 脚本socket通信,Linux实例:用socket通讯远程执行命令
  3. mvc:default-servlet-handler标签的作用
  4. jquery mobile用代码弹出dialog
  5. 扩充你的工具箱 - 大行文件的处理
  6. Play framework request code 413
  7. 计算机网络学习(四)网络层
  8. java编写文本编辑器_基于java实现文本编辑器.doc
  9. FileUpload1文件上传
  10. [转]DOS批处理高级教程精选合编
  11. 完全卸载VMware
  12. Apache Griffin+Flink+Kafka实现流式数据质量监控实战
  13. Android App赞赏功能,微信公众号赞赏功能升级:作者可以直接收到赞赏
  14. C++之重载:函数名的鱼塘
  15. 用python将照片做成数据集_那个20多万“不可描述”照片的数据集,有人用python做了鉴黄模型 | Demo...
  16. BZOJ 1124 [POI2008]枪战Maf 贪心+乱搞
  17. 很多人已经学会了应对恐惧和焦虑的秘诀
  18. Transformer主干网络——T2T-ViT保姆级解析
  19. 一个正经的前端学习 开源 仓库(阶段十三)
  20. eyou列表调用有缩图显示缩图,无缩图则不显示缩图

热门文章

  1. python 手写选择排序(不用sort)
  2. gene prediction commend 2
  3. 魅族MX5data目录下不显示
  4. 微信机器人Z2OBot 小K,上线啦,文末有福利(POC)
  5. 支付业务以及支付业务的质量保障
  6. Linux检测端口是否被防火墙禁止或端口是否被占用
  7. python3爬虫实战:requests库+正则表达式爬取头像
  8. 你负责貌美如花,我负责赚钱养家
  9. PC网站微信支付怎么开通0.2费率?网页微信支付0.6费率降低至0.2
  10. 信用卡分销系统功能介绍