zoukankan      html  css  js  c++  java
  • 《大话设计模式》学习笔记20:职责链模式

      

      

    申请审批示例:

      

    1.请求类:

        public class Request
        {
            public string RequestType { get; set; }
            public string RequestContent { get; set; }
            public int Number { get; set; }
        }

    2.Handler:

        public abstract class Manager
        {
            protected string name;
            protected Manager superiorManager;
    
            public Manager(string name)
            {
                this.name = name;
            }
            public void SetSuperior(Manager superiorManager)
            {
                this.superiorManager = superiorManager;
            }
            public abstract void RequestApplication(Request request);
        }

    3.ConcreteHandler:

        public class CommonManager:Manager
        {
            public CommonManager(string name)
                :base(name)
            {
    
            }
            public override void RequestApplication(Request request)
            {
                if(request.RequestType=="请假"&&request.Number<=2)
                {
                    Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestType, request.Number);
                }
                else
                {
                    if(superiorManager!=null)
                    {
                        superiorManager.RequestApplication(request);
                    }
                }
            }
        }
        public class Majordomo:Manager
        {
            public Majordomo(string name)
                :base(name)
            {
    
            }
            public override void RequestApplication(Request request)
            {
                if(request.RequestType=="请假"&&request.Number<=5)
                {
                    Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestType, request.Number);
                }
                else
                {
                    if(superiorManager!=null)
                    {
                        superiorManager.RequestApplication(request);
                    }
                }
            }
        }
        public class GeneralManager:Manager
        {
            public GeneralManager(string name)
                :base(name)
            {
    
            }
            public override void RequestApplication(Request request)
            {
                if(request.RequestType=="请假")
                {
                    Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestType, request.Number);
                }
                else if(request.RequestType=="加薪")
                {
                    if (request.Number <= 500)
                    {
                        Console.WriteLine("{0}:{1} 数量{2} 被批准", name, request.RequestType, request.Number);
                    }
                    else
                    {
                        Console.WriteLine("{0}:{1} 数量{2} 再说吧", name, request.RequestType, request.Number);
                    }
                }
            }
        }

    客户端代码:

        class Program
        {
            static void Main(string[] args)
            {
                Manager commonManager = new CommonManager("经理");
                Manager majordom = new Majordomo("总监");
                Manager generalManager = new GeneralManager("总经理");
    
                commonManager.SetSuperior(majordom);
                majordom.SetSuperior(generalManager);
    
                Request request = new Request();
    
                request.RequestType = "请假"; request.RequestContent = "事假"; request.Number = 1;
                commonManager.RequestApplication(request);
    
                request.RequestType = "请假"; request.RequestContent = "年假"; request.Number = 4;
                commonManager.RequestApplication(request);
    
                request.RequestType = "加薪"; request.RequestContent = "加薪一千"; request.Number = 1000;
                commonManager.RequestApplication(request);
            }
        }

      优点:接收者和发送者都没有对方的明确信息,且链中对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有候选接受者的引用。

  • 相关阅读:
    如何让研发团队保持敏捷并不断进步?
    敏捷方法适合什么样的团队?
    规模化敏捷中的“三要”和“三不要”
    敏捷开发中如何使用看板方法创造价值
    4.0 初步预计更新内容
    3.0 环境应用(待更新)
    5.0 Genymotion安装以及基础使用
    2.0 python+appium环境搭建
    1.0 python-client以及ui自动化介绍
    教你一招另辟蹊径抓取美团火锅数据
  • 原文地址:https://www.cnblogs.com/walden1024/p/4528972.html
Copyright © 2011-2022 走看看