c# 职责链

来不及解释了,直接开车

public class ChainOfResponsibilityExample1 : MonoBehaviour
    {
        private GameObject prefab;
	    void Start ( )
        {
            //设置职责链
            Approver larry = new Director();
            Approver sam = new VicePresident();
            Approver tammy = new President();
            //larry->sam->tammy
            larry.SetSuccessor(sam);
            sam.SetSuccessor(tammy);

            //发布任务
            Purchase p = new Purchase(2034, 350.00, "Project X");
            larry.ProcessRequest(p);

            p = new Purchase(2035, 32590.10, "Project Y");
            larry.ProcessRequest(p);

            p = new Purchase(2036, 122100.00, "Project Z");
            larry.ProcessRequest(p);

        }
    }

    /// <summary>
    /// The 'Handler' abstract class
    /// </summary>
    abstract class Approver
    {
        protected Approver successor;//继承人

        public void SetSuccessor(Approver successor)
        {
            this.successor = successor;
        }

        public abstract void ProcessRequest(Purchase purchase);//处理请求
    }

    /// <summary>
    /// 主管
    /// </summary>
    class Director : Approver
    {
        public override void ProcessRequest(Purchase purchase)
        {
            if (purchase.Amount < 10000.0)
            {
                Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
            }
            else if (successor != null)
            {
                Debug.Log(this.GetType().Name + ":" + purchase.Purpose + "需要副总裁做决定");
                successor.ProcessRequest(purchase);
            }
        }
    }

    /// <summary>
    /// VP
    /// </summary>
    class VicePresident : Approver
    {
        public override void ProcessRequest(Purchase purchase)
        {
            if (purchase.Amount < 25000.0)
            {
                Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
            }
            else if (successor != null)
            {
                Debug.Log(this.GetType().Name + ":"+purchase.Purpose+"需要总裁做决定");
                successor.ProcessRequest(purchase);
            }
        }
    }

    /// <summary>
    /// CEO
    /// </summary>
    class President : Approver
    {
        public override void ProcessRequest(Purchase purchase)
        {
            if (purchase.Amount < 100000.0)
            {
                Debug.Log(this.GetType().Name + ":批准 " + purchase.Purpose);
            }
            else
            {
                Debug.Log(purchase.Purpose+ "需要所有人开个会!");
            }
        }
    }

    /// <summary>
    /// Class holding request details
    /// </summary>
    class Purchase
    {
        private int _price;
        private double _amount;
        private string _purpose;

        // Constructor
        public Purchase(int price, double amount, string purpose)
        {
            this._price = price;
            this._amount = amount;
            this._purpose = purpose;
        }

        // Gets or sets purchase number
        public int Price
        {
            get { return _price; }
            set { _price = 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; }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值