• 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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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);
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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);
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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!");
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5.Purchase 采购的商品

        class Purchase
        {
            private int _number;
            private double _amount;
            private string _purpose;
    
            // Constructor
            public Purchase(int number, double amount, string purpose)
            {
                this._number = number;
                this._amount = amount;
                this._purpose = purpose;
            }
    
            // Gets or sets purchase number
            public int Number
            {
                get { return _number; }
                set { _number = value; }
            }
    
            // Gets or sets purchase amount
            public double Amount
            {
                get { return _amount; }
                set { _amount = value; }
            }
    
            // Gets or sets purchase purpose
            public string Purpose
            {
                get { return _purpose; }
                set { _purpose = value; }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    6.测试

        public class ChainOfResponsibilityExample1 : MonoBehaviour
        {
    	    void Start ( )
            {
                // Setup Chain of Responsibility
                Approver larry = new Director();
                Approver sam = new VicePresident();
                Approver tammy = new President();
    
                larry.SetSuccessor(sam);
                sam.SetSuccessor(tammy);
    
                // Generate and process purchase requests
                Purchase 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);
    
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

  • 相关阅读:
    Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
    Android Studio导入aosp源码
    Java 中 List 删除元素
    阿里首席架构师谈微服务:入门到实战架构
    chromium 54 chrome 各个版本发布功能列表(109-119)
    【论文精读】NMP: End-to-end Interpretable Neural Motion Planner
    java固定资产管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Git 常用命令汇总
    k线图快速入门必读
    【Golang | gRPC】使用openssl生成证书
  • 原文地址:https://blog.csdn.net/zzzsss123333/article/details/133386177