C#设计模式之---责任链模式

这篇具有很好参考价值的文章主要介绍了C#设计模式之---责任链模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

责任链模式(Chain of Responsibility)

责任链模式(Chain of Responsibility)是一种对象行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。也就是通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
    //一般每个接口或类都写在单独的.cs文件中
    //本示例为了执行查看方便才写在一起  
    /// 
    /// 请假申请
    /// 
    public class ApplyContext
    {
        public int Id { get; set; }
        public string Name { get; set; }
        /// 
        /// 请假时长
        /// 
        public int Hour { get; set; }
        public string Description { get; set; }
        public bool AuditResult { get; set; }
        public string AuditRemark { get; set; }
    }
    public class AuditorManager
    {
        private static BaseAuditor AuditorProcess = null;
        static AuditorManager()
        {
            PM pm = new PM()
            {
                Name = "cjavapy"
            };
            Charge charge = new Charge()
            {
                Name = "coder"
            };
            Manager manager = new Manager()
            {
                Name = "leader"
            };
            CTO cto = new CTO()
            {
                Name = "levi"
            };
            pm.SetNext(manager);
            manager.SetNext(cto);
            AuditorProcess = pm;
        }
        public static BaseAuditor GetAuditor()
        {
            return AuditorProcess;
        }
    }
    public abstract class BaseAuditor
    {
        protected BaseAuditor _NextAudtitor { get; private set; }
        public void SetNext(BaseAuditor nextAuditor)
        {
            this._NextAudtitor = nextAuditor;
        }
        protected void AuditNext(ApplyContext context)
        {
            if (this._NextAudtitor == null)
            {
                context.AuditResult = false;
                context.AuditRemark = "审批不通过";
            }
            else
            {
                this._NextAudtitor.Audit(context);
            }
        }
        public string Name { get; set; }
        public abstract void Audit(ApplyContext context);
    }
    public class Charge : BaseAuditor
    {
        public override void Audit(ApplyContext context)
        {
            if (context.Hour <= 16)
            {
                context.AuditResult = true;
                context.AuditRemark = "C#";
            }
            else
            {
                if (base._NextAudtitor == null)
                {
                    context.AuditResult = false;
                    context.AuditRemark = "审批不通过";
                }
                else
                {
                    base._NextAudtitor.Audit(context);
                }
            }
        }
    }
    public class CTO : BaseAuditor
    {
        public override void Audit(ApplyContext context)
        {
            if (context.Hour <= 40)
            {
                context.AuditResult = true;
                context.AuditRemark = Name + " audit";
            }
            else
            {
                if (base._NextAudtitor == null)
                {
                    context.AuditResult = false;
                    context.AuditRemark = "审批不通过";
                }
                else
                {
                    base._NextAudtitor.Audit(context);
                }
            }
        }
    }
    public class Manager : BaseAuditor
    {
        public override void Audit(ApplyContext context)
        {
            if (context.Hour <= 24)
            {
                context.AuditResult = true;
                context.AuditRemark = Name+ " audit";
            }
            else
            {
                if (base._NextAudtitor == null)
                {
                    context.AuditResult = false;
                    context.AuditRemark = "审批不通过";
                }
                else
                {
                    base._NextAudtitor.Audit(context);
                }
            }
        }
    }
    public class PM : BaseAuditor
    {
        //PM:<=8 通过申请
        //    >8  让上级审批
        //    指定了上级
        public override void Audit(ApplyContext context)
        {
            context.AuditRemark += "PM开始处理";
            if (context.Hour <= 8)
            {
                context.AuditResult = true;
                context.AuditRemark = "run";
            }
            else
            {
                base.AuditNext(context);
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            ApplyContext context = new ApplyContext()
            {
                Id = 11,
                Name = "coder",
                Hour = 10,
                Description = "我想玩游戏",
                AuditResult = false,
                AuditRemark = ""
            };
            BaseAuditor auditor = AuditorManager.GetAuditor();
            auditor.Audit(context);
            if (context.AuditResult)
            {
                Console.WriteLine("审批通过");
            }
            else
            {
                Console.WriteLine("审批没通过");
            }
            Console.WriteLine(context.AuditRemark);
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-541465.html

到了这里,关于C#设计模式之---责任链模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式:责任链模式

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,直到其中一个对象能够处理该请求为止。责任链模式将请求发送者和接收者解耦,使得多个对象都有机会处理请求,同时避免了请求发送者与接收者之间的直接耦合关系。 在

    2024年02月07日
    浏览(37)
  • 设计模式——责任链模式

    使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。 优点 能将请求和处理分开。请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,两者解耦提高系

    2024年02月15日
    浏览(33)
  • 重温设计模式 --- 责任链模式

    责任链模式 是一种行为型设计模式,它通过一条由多个处理器组成的链来处理请求,每个处理器都有机会处理请求,如果一个处理器不能处理该请求,它会将请求传递给下一个处理器,直到请求被处理为止。 在实际应用中,责任链模式常用于处理请求的分发、事件处理等场

    2024年02月13日
    浏览(31)
  • 设计模式——22. 责任链模式

    责任链模式是一种行为设计模式,它允许你创建一个对象链,每个对象都包含了请求的一部分处理逻辑,并且请求按照链的顺序依次传递,直到有一个对象处理它为止。责任链模式通常用于将一个请求从发送者传递给多个接收者,直到有一个接收者处理请求为止。 责任链模式

    2024年02月07日
    浏览(29)
  • 面试设计模式-责任链模式

    在进行请假申请,财务报销申请,需要走部门领导审批,技术总监审批,大领导审批等判断环节。存在请求方和接收方耦合性太强,代码会比较臃肿,不利于扩展和维护。 针对上面,使用责任链模式,将请求方和接收方的业务进行解耦, 客户端发送一个请求,由一个抽象的

    2024年02月09日
    浏览(30)
  • 设计模式详解-责任链模式

    类型:行为型模式 实现原理:为请求创建了一个接收者对象的链。对请求的发送者和接收者进行解耦,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 作用:避免请求发送者与接收者耦合在一

    2024年02月12日
    浏览(29)
  • 说说设计模式~责任链模式

    回到目录 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一

    2024年02月11日
    浏览(29)
  • 设计模式07-责任链模式

    责任链模式属于行为设计模式,常见的过滤器链就是使用责任链模式设计的。 Q:假设有一个闯关游戏,共三关,每一关达到通过条件后才能进入下一关,使用java实现。 A:针对这个问题,按照朴素的想法,我们可以定义三个类,分别是第一关、第二关、第三关,客户端启动

    2024年02月16日
    浏览(27)
  • 设计模式之责任链模式

    责任链设计模式是一种行为设计模式,它允许你创建一个对象链。请求从链的一端进入,并沿着链的路径依次经过各个对象,直至找到合适的处理者。每个对象都决定是否要处理该请求或将其传递给链中的下一个对象。 1.1 核心概念 Handler(处理者):每个处理者对象包含了处

    2024年02月05日
    浏览(38)
  • Java设计模式——责任链模式

    当一个请求需要在多个对象之间传递,每个对象都可能处理该请求或将其传递给下一个对象。在这种情况下,需要避免将发送者与接收者之间的耦合,以及确定请求的处理方式。此时可使用责任链模式,它的优点有降低耦合度(无需关心哪个对象会处理请求),灵活性(可以

    2024年02月21日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包