設計模式-行爲模式

職責鏈模式 Chain of Responbility

這裏寫圖片描述

示例代碼

namespace ChainOfResponsibility
{
    public class PurchaseRequest
    {
        private double amount;

        public double Amount
        {
            get { return amount; }
            set { amount = value; }
        }
        private string purpose;

        public string Purpose
        {
            get { return purpose; }
            set { purpose = value; }
        }

        public PurchaseRequest(double amount, string purpose) 
        {
            this.amount = amount;
            this.purpose = purpose;
        }

    }
}


namespace ChainOfResponsibility
{
    class ManagerPPower : PurchasePower
    {
        private const double ALLOWABLE = 20 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("Manager will approve $" + request.Amount);
            }
            else if (successor != null)
            {
                successor.ProcessRequest(request);
            }
        }
    }
}

namespace ChainOfResponsibility
{
    class ManagerPPower : PurchasePower
    {
        private const double ALLOWABLE = 20 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("Manager will approve $" + request.Amount);
            }
            else if (successor != null)
            {
                successor.ProcessRequest(request);
            }
        }
    }
}

namespace ChainOfResponsibility
{
    public abstract class PurchasePower
    {
        protected const double BASE = 500;
        protected PurchasePower successor;

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

        public abstract void ProcessRequest(PurchaseRequest request);
    }
}

namespace ChainOfResponsibility
{
    class ManagerPPower : PurchasePower
    {
        private const double ALLOWABLE = 20 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("Manager will approve $" + request.Amount);
            }
            else if (successor != null)
            {
                successor.ProcessRequest(request);
            }
        }
    }
}

namespace ChainOfResponsibility
{
    public class DirectorPPower : PurchasePower
    {
        private const double ALLOWABLE = 20 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("Director will approve $" + request.Amount);
            }
            else if (successor != null)
            {
                successor.ProcessRequest(request);
            }
        }
    }
}

namespace ChainOfResponsibility
{
    public class PresidentPPower : PurchasePower 
    {
        private const double ALLOWABLE = 60 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("President will approve $" + request.Amount);
            }
            else
            {
                Console.WriteLine("Your request for $" + request.Amount + " needs a board meeting!");
            }
        }
    }
}

namespace ChainOfResponsibility
{
    public class VicePresidentPPower : PurchasePower 
    {
        private const double ALLOWABLE = 40 * BASE;

        public override void ProcessRequest(PurchaseRequest request)
        {
            if (request.Amount < ALLOWABLE)
            {
                Console.WriteLine("Vice President will approve $" + request.Amount);
            }
            else if (successor != null)
            {
                successor.ProcessRequest(request);
            }
        }
    }
}

namespace ChainOfResponsibility
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagerPPower manager = new ManagerPPower();
            DirectorPPower director = new DirectorPPower();
            VicePresidentPPower vp = new VicePresidentPPower();
            PresidentPPower president = new PresidentPPower();
            manager.SetSuccessor(director);
            director.SetSuccessor(vp);
            vp.SetSuccessor(president);

            try
            {
                while (true)
                {
                    Console.WriteLine("Enter the amount to check who should approve your expenditure.");
                    Console.Write(">");
                    double d = Double.Parse(Console.ReadLine());
                    manager.ProcessRequest(new PurchaseRequest(d, "General"));
                }
            }
            catch (Exception e)
            {
                Environment.Exit(1);
            }
        }
    }
}

迭代器模式 Iterator

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章