一、责任链模式的介绍

责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考虑是否可以使用责任链模式。下面的介绍将会按照这个审批的例子写Demo;

二、责任链模式的Demo

//采购请求
    public class PurchaseRequest
    {
        //金额
        public double Amount { get; set; }
        //产品名字
        public string ProductName { get; set; }

        public PurchaseRequest(double amount,string productName)
        {
            Amount = amount;
            ProductName = productName;
        }
    }

//审批人。
    public abstract class Approver
    {
        
        public Approver NextApprover { get; set; }

        public string Name { get; set; }

        public Approver(string name)
        {
            Name = name;
        }

        public abstract void ProcessRequest(PurchaseRequest purchaseRequset);

    }

//管理者
    public class Manager : Approver
    {
        public Manager(string name) : base(name)
        {

        }

        public override void ProcessRequest(PurchaseRequest purchaseRequset)
        {
            if (purchaseRequset.Amount < 10000)
            {
                Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name, purchaseRequset.ProductName);
            }
            else if(NextApprover!=null)
            {
                NextApprover.ProcessRequest(purchaseRequset);
            }
        }
    }

//副总
    public class VicePresident : Approver
    {
        public VicePresident(string name) : base(name)
        {
        }

        public override void ProcessRequest(PurchaseRequest purchaseRequset)
        {
            if (purchaseRequset.Amount < 20000)
            {
                Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name, purchaseRequset.ProductName);
            }
            else if (NextApprover != null)
            {
                NextApprover.ProcessRequest(purchaseRequset);
            }
        }
    }

//总经理
    public class President : Approver
    {
        public President(string name) : base(name)
        {
        }

        public override void ProcessRequest(PurchaseRequest purchaseRequset)
        {
            if (purchaseRequset.Amount < 100000)
            {
                Console.WriteLine("{0}-{1} approved the request of purshing {2}", this, Name,
                    purchaseRequset.ProductName);
            }
            else
            {
                Console.WriteLine("我们需要组织会议");
            }
        }
    }

三、Demo位置

GitHub:https://github.com/wangtongzhou520/Designpattern

  

最新文章

  1. Keepalived+LVS+nginx双机热备
  2. StringTemplate初步使用
  3. :尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ---&gt; System.BadImageFormatException: 试图加载格式不正确的程序。
  4. Linux vmstat字段解析
  5. CSS3是怎么实现全景特效?
  6. busybox-1.12.2编译提示“混合的隐含和普通规则”错误解决
  7. 求n*m网格内矩形的数目
  8. python 循环、循环设计、循环对象
  9. LightOJ 1422 Halloween Costumes 区间dp
  10. 利用 squid 反向代理提高网站性能
  11. Go 单例模式[个人翻译]
  12. python:更改pip源
  13. JS 函数参数 及 函数数组
  14. 冒泡 MS Azure 不便宜。。。
  15. STL之迭代器(iterator)
  16. 论文阅读笔记十三:The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation(FC-DenseNets)(CVPR2016)
  17. MySQL优化之——备份和恢复
  18. LeetCode 496 Next Greater Element I 解题报告
  19. Java调用SQL Server存储过程
  20. c语言学习笔记---符号

热门文章

  1. nodejs进阶(4)—读取图片到页面
  2. 渗透测试工具BurpSuite做网站的安全测试(基础版)
  3. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)
  4. [APUE]UNIX进程的环境(上)
  5. [APUE]标准IO库(上)
  6. 简约之美Jodd-http--深入源码理解http协议
  7. equals变量在前面或者在后面有什么区别吗?这是一个坑点
  8. document.compatMode
  9. ViewController respondsToSelector 错误的解决方法
  10. jira的插件开发流程实践