策略模式 - Unity
文章目录
- 策略模式
- 结构
- 实现
- 应用场景
- 优缺点
- 与其他模式的区别
策略模式
策略模式是一种对象行为型模式。该模式定义一系列算法,将其封装起来,使这些算法在完成特定任务时,可以相互替换。 通过一个情景类,将其算法实现和业务逻辑分离,动态的切换不同的算法进行管理。
策略模式在生活中也十分常见,如出行的方式,当需要到达一个目的地时,我们需要一个方式去实现,骑车,坐公交等,它们都是实现了同一个任务,但实现的方式截然不同。在程序中,排序是非常常见的,不同的排序方式有不同的特定(如快排,归排,堆排等),通过不同的场景,我们可以灵活的选择这些排序。
结构
说明
- 抽象策略(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相关推荐
- Unity 游戏设计模式 — 策略模式(Strategy)
策略模式(Strategy) 一.使用策略模式的原因 二.策略模式的定义 三.策略模式的使用说明 四.策略模式的实现范例 五.中介者模式的优点和注意事项 六.策略模式的总结 一.使用策略模式的原因 在 ...
- 接口进阶:接口子类实例化和策略模式
文章目录 几种类型的实例化 示例生成CS 0501: 实例化场景 策略模式案例 设计谜题 几种类型的实例化 抽象类 - 不可以直接实例化 同样纯抽象类 - 接口,也不可以直接实例化 使用虚方法的类(有 ...
- 游戏设计模式之策略模式(二)
今天来讲一下策略模式. 在我们进行游戏开发的时候,总避免不了改动自己的算法.特别是你做完一个功能之后,策划跑来跟你说,我觉得我们还可以加一个功能(这个功能跟前一个功能类似),第一次过来跟你说要加,那自 ...
- 【Design pattern】简单工厂过渡策略模式
把自己当做小菜来跟学<大话设计模式>,跟着故事的思路来走 简单工厂模式:实现一个计算器代码 策略模式:商场打折代码 根据大鸟和小菜的故事,一步步的完善问题的过程!
- 设计模式 之美 -- 策略模式
策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换.对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户. 基本的UML类图如下: 用户使用S ...
- 设计模式之策略模式(Strategy)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Java中的策略模式实例教程
策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把 ...
- else 策略模式去掉if_设计模式(三)——简单的状态模式代替if-else
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长. 前言 大多数开发人员现在还在使用if else的过 ...
- C++模式学习------策略模式
当遇到同一个对象有不同的行为,方法,为管理这些方法可使用策略模式. 策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来.通常把一个系列的算法包装到一系列的策略类里面,这些类继承一个抽象的 ...
最新文章
- [C#] C#访问数据库(SQL Server版本)
- mongodb系列01--基础篇
- java lock可重入_Java源码解析之可重入锁ReentrantLock
- ie浏览器剪贴板操作警告弹窗关闭方法
- ssa/ass字幕格式全解析
- zuc算法代码详解_密码学算法之序列密码中的ZUC算法详解
- 基于存储卡的音乐播放器0.6
- 关于菜鸟的圆通电子面单打印
- 箱形图适用于哪种数据_数据可视化分析中图表选择
- docker访问宿主机127.0.0.1
- 工作中提升效率的工具
- 首字母大写--C++实现
- 关于tensor的shape理解
- 入行软件测试5年,跳槽3次,我摸透了软件测试这一行
- 51单片机PS2键盘解码实验--C51源代码
- jms是java平台中面向_Jms学习篇一:JMS介绍
- micropython人脸识别代码_【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试...
- DNS:Round Robin 和 Netmask Ordering
- 【总结】2023数学建模美赛!收官!
- 钉钉单据对接用友、金蝶