当前位置: 首页 > news >正文

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);}}

在这里插入图片描述

http://www.lryc.cn/news/178000.html

相关文章:

  • Java中String转换为double类型
  • 不同埋深地下管线的地质雷达响应特征分析
  • 重新认识mysql
  • 系统集成|第十九章(笔记)
  • 【Linux】Linux远程访问Windows下的MySQL数据库
  • android安卓core tombstone .pb
  • C++简单实现红黑树
  • 国庆加速度!新增功能点锁定功能,敏捷开发新增估算功能,助力项目快速突破!
  • uniapp 如何动态切换应用图标、名称
  • CUDA学习笔记0929
  • XML-Based Configuration Beans for Ioc Container
  • 俞敏洪:董宇辉在北京有房子了!
  • 蓝桥等考Python组别七级006
  • 港联证券:股市3000点什么意思?
  • windows 下 vs code 格式化代码(clang-format)
  • USB TypeC接口说明
  • 深眸科技入局AI视觉行业,以深度学习赋能视觉应用推进智造升级
  • 基于微信小程序的校园失物招领系统设计与实现(源码+lw+部署文档+讲解等)
  • 蓝桥等考Python组别七级001
  • 【软件测试】开发/测试模型
  • 用于时间触发的嵌入式软件的IDE
  • wordpress插件-免费的wordpress全套插件
  • 第一百五十七回 SliverList组件
  • 数据结构与算法——17.二叉搜索树
  • rust所有权
  • Win10电脑任务栏没有蓝牙图标的简单解决方法
  • 判断编译器类型、编译器版本、操作系统。
  • 百度实习一面(知识图谱部门)
  • Oracle 数据库查询优化
  • 时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测