zoukankan      html  css  js  c++  java
  • 责任链模式 与中间件

    1。 先看责任链模式:请假流程,抽象的经理和具体的级别不同的经理(只贴出级别1的经理)。

        public abstract class Manager
        {
            public string Name { get; set; }
            public Manager Leader { get; set; }
            public abstract void Approve(Request request);
        }
    public class ManagerLevel1: Manager
        {
            public int Day { get; set; } = 3;
            public override void Approve(Request request)
            {
                if (request.Day <= Day)
                {
                    Console.WriteLine($"一级管理者 {Name} 批准了 {request.Name},{request.Day}天");
                }
                else
                {
                    Console.WriteLine($"{Name} 交给leader, {request.Day}天");
                    Leader.Approve(request);
                }
            }
        }
        public class Request
        {
            public int Day { get; set; }
            public string Name { get; set; }
        }
    View Code

    主代码:

     Console.WriteLine("Hello World!");
    
                var app = new App();
    
                var m1 = new ManagerLevel1();
                var m2 = new ManagerLevel2();
                var m3 = new ManagerLevel3();
    
                m1.Leader = m2;
                m2.Leader = m3;
    
                var re = new Request() { Name = "张三", Day = 6};
                m1.Approve(re);

    责任链模式结束,增加管理者:

        public  class App
        {
            List<Manager> managers { get; set; } = new List<Manager>();
    
            public App Use(Manager m)
            {
                var last= managers.LastOrDefault();
                if (last != null)
                    last.Leader = m;
    
                managers.Add(m);
    
                return this;
            }
        }

    主代码变成这样:

    Console.WriteLine("Hello World!");
    
    var app = new App();
    
    var m1 = new ManagerLevel1();
    var m2 = new ManagerLevel2();
    var m3 = new ManagerLevel3();
    
    app.Use(m1);
    app.Use(m2);
    app.Use(m3);
    
    var re = new Request() { Name = "张三", Day = 6};
    m1.Approve(re);
    气功波(18037675651)
  • 相关阅读:
    面向对象定义
    xml与面上对象初识
    模块configparser/subprocess/表格处理模块
    python模块
    python-判断语句
    python了解
    Qt Qwdget 汽车仪表知识点拆解7 图像绘制,旋转
    Qt Qwdget 汽车仪表知识点拆解6 自定义控件
    Qt Qwdget 汽车仪表知识点拆解5 标题栏图标闪烁
    Qt Qwdget 汽车仪表知识点拆解4 另类进度条实现
  • 原文地址:https://www.cnblogs.com/qgbo/p/14495203.html
Copyright © 2011-2022 走看看