Unity实现设计模式——策略模式
Unity实现设计模式——策略模式
策略模式是一种定义一些列算法的方法,这些所有的算法都是完成相同的工作,只是实现不同。它可以通过相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。
策略模式的 Strategy 类层次为 Context 定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。
策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
需要注意的是策略模式与工厂模式的区别
简单工厂模式下,产品类(父类)里包含了产品的属性,所以每个具体产品(子类)也就包含了同样的属性。
策略模式下,策略类(父类)里只提供了虚方法,并没有包含属性,所以每个具体的算法有自己独立的属性。

下面使用对于一个结构进行排序的例子来演示
1.SortStrategy(The ‘Strategy’ abstract class)
abstract class SortStrategy{public abstract void Sort(List<string> list);}
2.派生类
(1)QuickSort
class QuickSort : SortStrategy{public override void Sort(List<string> list){list.Sort(); // Default is QuicksortDebug.Log("-------QuickSorted list------- ");}}
(2)ShellSort
class ShellSort : SortStrategy{public override void Sort(List<string> list){//list.ShellSort(); not-implementedDebug.Log("-------ShellSorted list------- ");}}
(3)MergeSort
class MergeSort : SortStrategy{public override void Sort(List<string> list){//list.MergeSort(); not-implementedDebug.Log("-------MergeSorted list------- ");}}
3.SortedList(The ‘Context’ class)
class SortedList{private List<string> _list = new List<string>();private SortStrategy _sortstrategy;public void SetSortStrategy(SortStrategy sortstrategy){this._sortstrategy = sortstrategy;}public void Add(string name){_list.Add(name);}public void Sort(){_sortstrategy.Sort(_list);// Iterate over list and display resultsforeach (string name in _list){Debug.Log(" " + name);}}}
4.测试
public class StrategyPatternExample1 : MonoBehaviour{void Start(){// Two contexts following different strategiesSortedList studentRecords = new SortedList();studentRecords.Add("Samual");studentRecords.Add("Jimmy");studentRecords.Add("Sandra");studentRecords.Add("Vivek");studentRecords.Add("Anna");studentRecords.SetSortStrategy(new QuickSort());studentRecords.Sort();studentRecords.SetSortStrategy(new ShellSort());studentRecords.Sort();studentRecords.SetSortStrategy(new MergeSort());studentRecords.Sort();}}
相关文章:
Unity实现设计模式——策略模式
Unity实现设计模式——策略模式 策略模式是一种定义一些列算法的方法,这些所有的算法都是完成相同的工作,只是实现不同。它可以通过相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。 策略模式的 Strategy 类层次为 Contex…...
C++基础——数据类型
1 概述 在创建变量和常量的时候,都需要指定其数据类型,以便为其分配合适的内存空间。 其中宏常量不需要指定类型,是因为宏定义是字符替换。 2 整型 整型表示的是整数,C中的整型有以下几种: 数据类型占用空间取值范…...
文本自动输入/删除的加载动画效果
效果展示 CSS 知识点 绕矩形四周跑的光柱动画实现animation 属性的 steps 属性值运用 页面基础结构实现 <div class"loader"><!-- span 标签是围绕矩形四周的光柱 --><span></span><span></span><span></span>&l…...
PHP8的匿名类-PHP8知识详解
PHP8支持通过new class 来实例化一个匿名类。所谓匿名类,就是指没有名称的类,只能在创建时使用new语句来声明它们。 匿名类是一种没有命名的即时类,可以用于简单的对象封装和实现接口。 以下是PHP 8中匿名类的基本语法示例: $ob…...
WebKit Inside: CSS 样式表的匹配时机
WebKit Inside: CSS 的解析 介绍了 CSS 样式表的解析过程,这篇文章继续介绍 CSS 的匹配时机。 无外部样式表 内部样式表和行内样式表本身就在 HTML 里面,解析 HTML 标签构建 DOM 树时内部样式表和行内样式就会被解析完毕。因此如果 HTML 里面只有内部样式…...
<HarmonyOS第一课>从简单的页面开始——闯关习题及答案
加入鸿蒙应用开发公开课系统学习HarmonyOS应用开发 判断题 1.在Column容器中的子组件默认是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向,在Row容器中的组件默认是按照从左到右的水平方向布局的,其主轴的方向是水平方向。ÿ…...
视频下载plus+:一款强大的视频下载小程序
引言 在当下,随着视频号的火爆和用户数量的不断增加,视频下载已经成为了众多用户追求的目标。尽管市面上有很多视频下载助手,但是很多人对于如何下载视频还是摸不着头脑。今天我将向大家推荐一款我自己使用并且非常好用的视频下载小程序——…...
扭线机控制
扭线机属于线缆加工设备,线缆加工设备种类非常多。有用于网线绞合的单绞,双绞机等,有关单绞机相关算法介绍,大家可以查看专栏相关文章,有详细介绍,常用链接如下: 线缆行业单绞机控制算法&#…...
Android App启动优化之启动框架
android启动优化是个比较重要的部分,也是一大难题,一个优秀的app首先给人第一感觉就是启动速度,启动速度非常影响用户的体验,那么我们今天展开说说启动优化相关的问题。 我们先来简单分析一下启动过程、启动优化方向,…...
zookeeper入门篇之分布式锁
文章目录 前言非公平锁公平锁 前言 上一篇说过,zookeeper是一个类似文件系统的数据结构,每个节点都可以看做是一个文件目录,也就是说,我们所创建的节点是唯一的,那么分布式锁的原理就是基于这个来的。 代码仓库&…...
leetcode解题思路分析(一百四十九)1297 - 1304 题
子串的最大出现次数 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数: 子串中不同字母的数目必须小于等于 maxLetters 。 子串的长度必须大于等于 minSize 且小于等于 maxSize 。 首先能想到的是从MinSize开始遍历查找&am…...
你的librosa和scikit-learn打架了吗?
被这个问题困扰好久!!!!!!!!!!!!!! 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按,按…...
理解自动驾驶感知技术
理解自动驾驶感知技术 文章目录 什么是自动驾驶感知技术?自动驾驶感知技术的关键组成部分1. 雷达(Radar)2. 摄像头(Camera)3. 激光雷达(Lidar)4. 超声波传感器(Ultrasonic Sensors&a…...
一款简化Python自然语言处理的开源库
迷途小书童 读完需要 3分钟 速读仅需 1 分钟 1 简介 TextBlob 是一个 Python 库,用于处理文本数据的自然语言处理(NLP)任务。它提供了简单且易于使用的 API,使得对文本进行分析、情感分析、词性标注、名词短语提取等任务变得更加简…...
常用Redis界面化软件
对于Redis的操作,前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中,可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具:Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…...
电脑散热——液金散热
目录 1.简介 2.传统硅脂与液金导热区别 3.特点 4.优点 5.为什么液金技术名声不太好 6.使用方法 1.简介 凡是对于电脑基础硬件有所了解的人,都知道硅脂是如今高性能电脑设备中必不可少的东西。芯片表面和散热器接触面,虽然肉眼看上去是非常光滑的金属…...
多线程锁-synchronized字节码分析
从字节码角度分析synchronized实现 javap -c(v附加信息) ***.class 文件反编译 synchronized同步代码块 >>>实现使用的是monitorenter和monitorexit指令 synchronized普通同步方法 >>>调用指令将会检查方法的ACC_SYNCHRONIZED访问标志是否被设置…...
SpringCloud学习笔记-Eureka的服务拉取
假设是OrderService里面拉取Eureka的服务之一User Service 1.依然需要在该服务里面引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependenc…...
COLLABORATIVE DESIGNER FOR SOLIDWORKS® 新功能
共享和标注 优点:收件人在浏览器中访问共享文 件,无需安装3DEXPERIENCE 平台应用程序。 • 与 SOLIDWORKS 中来自您组织内部或外部的任何人无缝 共享您的设计。 • 直接将评论和标注附加到您的设计作品中,便于立即获得 反馈。 支持 SOLIDWO…...
AMD CPU 虚拟机安装 macos 系统的各虚拟机系统对比
软硬件环境: CPU:AMD R7 7735HS 8核16线程 显卡:AMD R680M 集显 内存:32GB DDR5 硬盘:2TB SSD Windows11 1、VMware Workstation 我用的是17 的版本,使用方便,对于macos 12及以下的安装在需要修改vmx 文…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
