Unity实现设计模式——责任链模式
Unity实现设计模式——责任链模式
责任链模式定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。
这里使用管理者、副总裁、总裁、依次采购商品的例子
管理者可以去采购商品,当采购的数量大于某个阈值时管理者不能完成该任务需要上级去完成,当上级也完不成的时候就要向最上级报告处理请求了
1.Approver 管理者的基类
abstract class Approver{protected Approver successor;public void SetSuccessor(Approver successor){this.successor = successor;}public abstract void ProcessRequest(Purchase purchase);}
2.Director 管理者
class Director : Approver{public override void ProcessRequest(Purchase purchase){if (purchase.Amount < 10000.0){Debug.Log(this.GetType().Name+" approved request# "+purchase.Number);}else if (successor != null){successor.ProcessRequest(purchase);}}}
3.VicePresident 副总裁
class VicePresident : Approver{public override void ProcessRequest(Purchase purchase){if (purchase.Amount < 25000.0){Debug.Log(this.GetType().Name + " approved request# " + purchase.Number);}else if (successor != null){successor.ProcessRequest(purchase);}}}
4.President 总裁
class President : Approver{public override void ProcessRequest(Purchase purchase){if (purchase.Amount < 100000.0){Debug.Log(this.GetType().Name + " approved request# " + purchase.Number);}else{Debug.Log("Request# "+purchase.Number+ "requires an executive meeting!");}}}
5.Purchase 采购的商品
class Purchase{private int _number;private double _amount;private string _purpose;// Constructorpublic Purchase(int number, double amount, string purpose){this._number = number;this._amount = amount;this._purpose = purpose;}// Gets or sets purchase numberpublic int Number{get { return _number; }set { _number = value; }}// Gets or sets purchase amountpublic double Amount{get { return _amount; }set { _amount = value; }}// Gets or sets purchase purposepublic string Purpose{get { return _purpose; }set { _purpose = value; }}}
6.测试
public class ChainOfResponsibilityExample1 : MonoBehaviour{void Start ( ){// Setup Chain of ResponsibilityApprover larry = new Director();Approver sam = new VicePresident();Approver tammy = new President();larry.SetSuccessor(sam);sam.SetSuccessor(tammy);// Generate and process purchase requestsPurchase p = new Purchase(2034, 350.00, "Assets");larry.ProcessRequest(p);p = new Purchase(2035, 32590.10, "Project X");larry.ProcessRequest(p);p = new Purchase(2036, 122100.00, "Project Y");larry.ProcessRequest(p);}}
相关文章:

Unity实现设计模式——责任链模式
Unity实现设计模式——责任链模式 责任链模式定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。 在职责链模式中&…...

Java中String转换为double类型
这次的java作业是写一个数字转换的小项目,其中从输入框中获取的是String类型,但是要进行数字操作,此时要用到很多操作String类型数据的方法了。 从javafx输入框中获取到String类型后,首先是要判断是否能转换为数字或者小数形式&a…...

不同埋深地下管线的地质雷达响应特征分析
不同埋深地下管线的地质雷达响应特征分析 前言 以混凝土管线为例,建立了不同埋深(70cm、100cm、130cm)地下管线的二维模型,进行二维地质雷达正演模拟,分析不同材质管线的地质雷达响应特征。 文章目录 不同埋深地下管…...

重新认识mysql
title: “重新认识mysql” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” 文章目录 title: "重新认识mysql" createTime: 2022-03-06T15:…...

系统集成|第十九章(笔记)
目录 第十九章 风险管理19.1 风险管理的概述及相关概念19.2 主要过程19.2.1 规划风险管理19.2.2 识别风险19.2.3 实施定性风险分析19.2.4 实施定量风险分析19.2.5 规划风险应对19.2.6 控制风险 上篇:第十八章、安全管理 下篇:第二十章、收尾管理 第十九…...

【Linux】Linux远程访问Windows下的MySQL数据库
1.建立Windows防火墙规则 首先需要开放windows防火墙,针对3306端口单独创建一条规则,允许访问。 打开windows安全中心防火墙与保护,点击高级设置 进入之后,点击入站规则,新建一条规则 新建端口入站规则 端口填写330…...
android安卓core tombstone .pb
Tombstone原理分析_内核工匠的博客-CSDN博客 android tombstone分析_tombstone 分析_良知犹存的博客-CSDN博客 Tombstone简介 当一个native程序开始执行时,系统会注册一些连接到debuggerd的signal handlers。针对进程出现的不同的异常状态,Linux kernel…...

C++简单实现红黑树
目录 一、概念 二、红黑树的性质 三、红黑树的定义 四、红黑树的插入操作 情况一(叔叔节点存在且为红色)——变色向上调整: 情况二(叔叔节点不存在或为黑色)——旋转变色: 2.1叔叔节点不存在 2.2叔叔…...

国庆加速度!新增功能点锁定功能,敏捷开发新增估算功能,助力项目快速突破!
大家好,CoCode开发云旗下Co-Project V3.6智能项目管理平台正式发布,平台新增功能点锁定功能、敏捷开发模式新增估算板块和两种估算方式。 功能点锁定功能进一步提高了项目估算的灵活性和准确性,有利于提高项目估算效率;而敏捷开发…...
uniapp 如何动态切换应用图标、名称
有时候我们需要实现类似百度网盘、淘宝APP这种可以动态切换 但是呢这种需求平常非常少见 很多人不知道如何操作 今天就教大家如何实现 这里我们需要用到一款插件Ba-ChangeIcon Ba-ChangeIcon 是一款uniapp动态切换应用图标、名称的插件。可实现过年、过节动态切换应用图标的效…...

CUDA学习笔记0929
一、GPU缓存和变量作用域 1. 缓存类型 (1)GPU缓存是非可编程存储区域 (2)GPU包含4类缓存: L1缓存,每个流处理器一个 L2缓存,全部流处理器共享一个 L1和L2都可用于存储本地和全局内存中的数…...
XML-Based Configuration Beans for Ioc Container
XML-Based Configuration XML-based configuration is the traditional way of configuring beans in Spring. <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"h…...

俞敏洪:董宇辉在北京有房子了!
据媒体报道,9月26日,俞敏洪在直播中透露,董宇辉已经在北京拥有了自己的房子,并且强调这是大家共同努力的结果。 这一消息引起了广泛关注和热议。在此之前,董宇辉曾在公开场合表示,俞敏洪老师为了给他凑钱买…...
蓝桥等考Python组别七级006
第一部分:选择题 1、Python L7 (15分) 下面for循环语句中,变量i的取值范围是( )。 for i in range(9): print(i) 1~90~91~80~8正确答案:D 2、Python L7 (15分) 下面哪一年是闰年?( &#...

港联证券:股市3000点什么意思?
近年来,股市风起云涌,上涨也好,下跌也罢,无一不让人心潮澎湃。但是,如果你听到股市3000点这个数字,你是否知道它意味着什么呢?接下来,我们将从商场体现、微观经济、投资者心态等方面…...

windows 下 vs code 格式化代码(clang-format)
vscode 的格式化代码能力来源于插件(有不止一种插件提供格式化功能),而非 vscode 本身 1、安装插件 2、windows 下载 LLVM-17.0.1-win64.exe (exe 结尾的安装包) Releases llvm/llvm-project GitHub 可以直接把这…...

USB TypeC接口说明
USB TypeC 拥有诸多优点:双面可插不担心正反、可做USB/雷电高速传输载体,支持 PD快充、音频设备、HDMI传输、调试模式等诸多功能。 市面上的其他USB接口和充电接口在逐步被TypeC替代,可以预见的是,TypeC作为一种多兼容性接口,其未来会具有非常长的生命周期。 本文主要介…...

深眸科技入局AI视觉行业,以深度学习赋能视觉应用推进智造升级
随着科技的飞速发展,人工智能技术已经成为改变我们生活的重要力量,而深度学习作为人工智能的一个重要分支,近年来随着卷积神经网络的突破和推广,取得了显著进展,并呈现爆发式增长势头。 目前AI技术已经被迅速引入到机…...

基于微信小程序的校园失物招领系统设计与实现(源码+lw+部署文档+讲解等)
前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...
蓝桥等考Python组别七级001
第一部分:选择题 1、Python L7 (15分) 下面for循环语句中,变量i的取值范围是( )。 for i in range(1, 10): print(i) 1~101~90~100~9正确答案:B 2、Python L7 (15分) 闰年是历法中的名词,包括普通闰年和世纪闰年两类:...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...