⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chainrealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Text;

//职责链模式(Chain of Responsibility)
//意图
//    使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
//    将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
//适用性
//    1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
//    2.你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
//    3.可处理一个请求的对象集合应被动态指定。

namespace DesignPattern.ChainRealWorld
{
    class ChainRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Setup Chain of Responsibility 
            Director Larry = new Director(); 
            VicePresident Sam = new VicePresident(); 
            President Tammy = new President(); 
            Larry.SetSuccessor(Sam); 
            Sam.SetSuccessor(Tammy); 
            
            // Generate and process purchase requests 
            Purchase p = new Purchase(2034, 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); 
            
            // Wait for user 
            ////Console.Read();
        }
    }
    
    // "Handler" 
    abstract class Approver 
    {
        protected Approver successor; 
        public void SetSuccessor(Approver successor) 
        {
            this.successor = successor; 
        }
        public abstract void ProcessRequest(Purchase purchase); 
    }
    
    // "ConcreteHandler" 
    class Director : Approver 
    {
        public override void ProcessRequest(Purchase purchase)
        {
            if (purchase.Amount < 10000.0) 
            {
                DesignPattern.FormMain.OutputInfo("{0} approved request# {1}", this.GetType().Name, purchase.Number); 
            }
            else if (successor != null) 
            {
                successor.ProcessRequest(purchase); 
            }
        }
    } 
    
    // "ConcreteHandler" 
    class VicePresident : Approver
    {
        public override void ProcessRequest(Purchase purchase) 
        {
            if (purchase.Amount < 25000.0) 
            {
                DesignPattern.FormMain.OutputInfo("{0} approved request# {1}", this.GetType().Name, purchase.Number); 
            }
            else if (successor != null) 
            {
                successor.ProcessRequest(purchase); 
            }
        }
    } 
    
    // "ConcreteHandler" 
    class President : Approver 
    {
        public override void ProcessRequest(Purchase purchase)
        {
            if (purchase.Amount < 100000.0) 
            {
                DesignPattern.FormMain.OutputInfo("{0} approved request# {1}", this.GetType().Name, purchase.Number); 
            }
            else
            { 
                DesignPattern.FormMain.OutputInfo("Request# {0} requires an executive meeting!", purchase.Number); 
            }
        }
    } 
    
    // Request details 
    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; 
        }
        
        // Properties 
        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; 
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -