设计模式-行为模式

来源:互联网 发布:防身器材 淘宝 编辑:程序博客网 时间:2024/06/10 22:57

职责链模式 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

这里写图片描述

0 0
原创粉丝点击