c#设计模式之责任链模式

来源:互联网 发布:淘宝客服交流技巧 编辑:程序博客网 时间:2024/05/17 22:59

在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任.


using System;class Purchase{    private int number;    private double amount;    private string purpose;    public Purchase(int number, double amount, string purpose)    {        this.number = number;        this.amount = amount;        this.purpose = purpose;    }    public double Amount    {        get { return amount; }        set { amount = value; }    }    public string Purpose    {        get { return purpose; }        set { purpose = value; }    }    public int Number    {        get { return number; }        set { number = value; }    }}abstract class Approver{    protected Approver successor;    public void SetSuccessor(Approver successor)    {        this.successor = successor;    }    public abstract void ProcessRequest(Purchase purchase);}class Director : Approver{    public override void ProcessRequest(Purchase purchase)    {        if (purchase.Amount < 10000.0)        {            Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number);        }        else if (null != successor)        {            successor.ProcessRequest(purchase);        }    }}class VicePresident : Approver{    public override void ProcessRequest(Purchase purchase)    {        if (purchase.Amount < 25000.0)        {            Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number);        }        else if (successor != null)        {            successor.ProcessRequest(purchase);        }    }}class President : Approver{    public override void ProcessRequest(Purchase purchase)    {        if (purchase.Amount < 100000.0)        {            Console.WriteLine("{0} approved request# {1}", this.GetType().Name, purchase.Number);        }        else        {            Console.WriteLine("Request! {0} requires an executive meeting!", purchase.Number);        }    }}class Program{    static void Main(string[] args)    {        Director Larry = new Director();        VicePresident Sam = new VicePresident();        President Tammy = new President();        Larry.SetSuccessor(Sam);        Sam.SetSuccessor(Tammy);        Purchase p = new Purchase(1024, 350.00, "Supplies");        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);        Console.ReadKey();    }}


原创粉丝点击