zoukankan      html  css  js  c++  java
  • C# 设计模式(15)责任链模式

    责任链模式

    1.逻辑封装和转移

    代码实现:

    上下文:

        public class ApplyContext
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Hour { get; set; }
            public string Description { get; set; }
            public string AuditRemark { get; set; }
            public bool AuditResult { get; set; }
        }

    抽象类:

        public abstract class AbstractAuditor
        {
    
            private AbstractAuditor _nextAuditor = null;
    
            public void SetNextAuditor(AbstractAuditor nextAuditor)
            {
                _nextAuditor = nextAuditor;
            }
    
            public abstract void Audit(ApplyContext applyContext);
    
            protected void NextAudit(ApplyContext applyContext)
            {
                if (_nextAuditor != null)
                {
                    _nextAuditor.Audit(applyContext);
                }
            }
        }
    

    实体类:

        public class PM : AbstractAuditor
        {
            public override void Audit(ApplyContext applyContext)
            {
                if(applyContext.Hour<8)
                {
                    applyContext.AuditResult = true;
                    Console.WriteLine("PM 审核完成!享受你的假期吧");
                }
                else
                {
                    base.NextAudit(applyContext);
                }
            }
        }
        public class Charge : AbstractAuditor
        {
            public override void Audit(ApplyContext applyContext)
            {
                if(applyContext.Hour<16)
                {
                    applyContext.AuditResult = true;
                    Console.WriteLine("主管 审核完成!享受你的假期吧");
                }
                else
                {
                    base.NextAudit(applyContext);
                }
            }
        }
        public class Manager : AbstractAuditor
        {
            public override void Audit(ApplyContext applyContext)
            {
                if(applyContext.Hour<24)
                {
                    Console.WriteLine("经理 审核完成!享受你的假期吧");
                }
                else
                {
                    base.NextAudit(applyContext);
                }
            }
        }

    代码调用:

        class Program
        {
            static void Main(string[] args)
            {
                ApplyContext applyContext = new ApplyContext()
                {
                    Id = 01,
                    Name = "Alex",
                    Hour = 12,
                    Description = "Vacation",
                    AuditResult = false,
                    AuditRemark = ""
                };
    
                PM pM = new PM();
                Charge charge = new Charge();
                Manager manager = new Manager();
                pM.SetNextAuditor(manager);
    
                pM.Audit(applyContext);
            }
        }

    结果:

  • 相关阅读:
    HTML DOM 事件
    js实现键盘数字输入
    js实现键盘数字输入
    onbeforeunload事件兼容性操作
    onbeforeunload事件兼容性操作
    window.event对象详尽解析
    git简单使用教程
    PHP中奖概率写法
    PHP替代session的方法
    nginx实现负载均衡
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14095403.html
Copyright © 2011-2022 走看看