文章目录

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

策略模式

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

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

结构


说明

  • 抽象策略(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. [C#] C#访问数据库(SQL Server版本)
  2. mongodb系列01--基础篇
  3. java lock可重入_Java源码解析之可重入锁ReentrantLock
  4. ie浏览器剪贴板操作警告弹窗关闭方法
  5. ssa/ass字幕格式全解析
  6. zuc算法代码详解_密码学算法之序列密码中的ZUC算法详解
  7. 基于存储卡的音乐播放器0.6
  8. 关于菜鸟的圆通电子面单打印
  9. 箱形图适用于哪种数据_数据可视化分析中图表选择
  10. docker访问宿主机127.0.0.1
  11. 工作中提升效率的工具
  12. 首字母大写--C++实现
  13. 关于tensor的shape理解
  14. 入行软件测试5年,跳槽3次,我摸透了软件测试这一行
  15. 51单片机PS2键盘解码实验--C51源代码
  16. jms是java平台中面向_Jms学习篇一:JMS介绍
  17. micropython人脸识别代码_【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试...
  18. DNS:Round Robin 和 Netmask Ordering
  19. 【总结】2023数学建模美赛!收官!
  20. 钉钉单据对接用友、金蝶

热门文章

  1. NSFont字体大全
  2. python实现 二维地表浅水方程 模型
  3. php 怎么发邮件,PHP 怎样发送邮件?
  4. python数据科学手册pdf百度云_Python数据科学手册
  5. 烤仔头条 | 你爱我,我爱你,百亿豪猫,喵喵喵~
  6. 拷贝文件到U盘提示文件过大,但是文件却比U盘总容量小很多,解决办法
  7. Problem K You Are Fired!
  8. 如何企划有价值的内容,提升客户满意度
  9. 用数据说话:新型冠状病毒传染性有多强?
  10. 在之后10个月里要践行的学习方法