• 21.责任链模式


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            //责任链模式指的是——某个请求需要多个对象进行处理,
            //从而避免请求的发送者和接收之间的耦合关系。
            //将这些对象连成一条链子,并沿着这条链子传递该请求,直到有对象处理它为止。
            static void Main(string[] args)
            {
                PurchaseRequest requestTelphone = new PurchaseRequest(4000.0, "电话");
                PurchaseRequest requestSoftware = new PurchaseRequest(10000.0, "软件");
                PurchaseRequest requestComputers = new PurchaseRequest(40000.0, "电脑");
                PurchaseRequest requestCar = new PurchaseRequest(140000.0, "汽车");
    
                Approver manager = new Manager("经理");
                Approver Vp = new VicePresident("副总");
                Approver Pre = new President("老板");
    
                // 设置责任链
                manager.NextApprover = Vp;
                Vp.NextApprover = Pre;
    
                // 处理请求
                manager.ProcessRequest(requestTelphone);
                manager.ProcessRequest(requestSoftware);
                manager.ProcessRequest(requestComputers);
                manager.ProcessRequest(requestCar);
                Console.ReadLine();
            }
    
            // 采购请求
            public class PurchaseRequest
            {
                // 金额
                public double Amount { get; set; }
                // 产品名字
                public string ProductName { get; set; }
                public PurchaseRequest(double amount, string productName)
                {
                    Amount = amount;
                    ProductName = productName;
                }
            }
    
    
            // 审批人,Handler
            public abstract class Approver
            {
                public Approver NextApprover { get; set; }
                public string Name { get; set; }
                public Approver(string name)
                {
                    this.Name = name;
                }
                public abstract void ProcessRequest(PurchaseRequest request);
            }
    
    
            // ConcreteHandler,经理
            public class Manager : Approver
            {
                public Manager(string name)
                    : base(name)
                {}
    
                //少于10000块,可以决定
                public override void ProcessRequest(PurchaseRequest request)
                {
                    if (request.Amount < 10000.0)
                    {
                        Console.WriteLine("{0}:{1}少于10000块,{2}可以批准!", request.ProductName, request.Amount,Name);
                    }
                    else if (NextApprover != null)
                    {
                        NextApprover.ProcessRequest(request);
                    }
                }
            }
    
    
            // ConcreteHandler,副总
            public class VicePresident : Approver
            {
                public VicePresident(string name)
                    : base(name)
                {}
    
                //少于25000块,可以决定
                public override void ProcessRequest(PurchaseRequest request)
                {
                    if (request.Amount < 25000.0)
                    {
                        Console.WriteLine("{0}:{1}少于10000块,{2}可以批准!", request.ProductName, request.Amount, Name);
                    }
                    else if (NextApprover != null)
                    {
                        NextApprover.ProcessRequest(request);
                    }
                }
            }
    
    
            // ConcreteHandler,总经理
            public class President : Approver
            {
                public President(string name)
                    : base(name)
                {}
    
                //少于100000可以决定
                public override void ProcessRequest(PurchaseRequest request)
                {
                    if (request.Amount < 100000.0)
                    {
                        Console.WriteLine("{0}:{1}少于10000块,{2}可以批准!", request.ProductName, request.Amount, Name);
                    }
                    else
                    {
                        Console.WriteLine("需要组织一个会议讨论");
                    }
                }
            }
        }
    }
  • 相关阅读:
    存储过程
    .Net经典面试题
    《锋利的Jquery》
    WPF-1
    ios-5-类别和协议
    ios-4-创建单例模式
    ios-3-简单内存管理
    ios-2
    ios -1
    <<ASP.NET MVC4 Web编程>>笔记
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4729388.html
Copyright © 2020-2023  润新知