首页 > 其他分享 >ChainOfResponsibilityPattern-责任链模式

ChainOfResponsibilityPattern-责任链模式

时间:2023-08-22 09:56:32浏览次数:41  
标签:supervisor request 模式 责任 ChainOfResponsibilityPattern LeaveRequestHandler new Le

在C#中,责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它可让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。请求沿着一个链传递,直到有一个对象处理它为止。

责任链模式有以下几个关键角色:

Handler(处理器):定义处理请求的接口,并通常持有一个指向下一个处理器的引用。

ConcreteHandler(具体处理器):实现处理请求的接口,并决定是否能够处理该请求,如果不能处理则将请求传递给下一个处理器。

下面是一个示例,展示如何在C#中使用责任链模式来实现一个简单的请假审批系统:

namespace ChainOfResponsibilityPattern_责任链模式
{
    public class ChainOfResponsibility
    {
        public abstract class LeaveRequestHandler
        {
            protected LeaveRequestHandler NextHandler;

            public void SetNextHandler(LeaveRequestHandler nextHandler)
            {
                NextHandler = nextHandler;
            }

            public abstract void HandleRequest(LeaveRequest request);
        }
        // ConcreteHandler
        public class SupervisorHandler : LeaveRequestHandler
        {
            public override void HandleRequest(LeaveRequest request)
            {
                if (request.Days <= 3)
                {
                    Console.WriteLine("Leave request approved by supervisor");
                }
                else if (NextHandler != null)
                {
                    NextHandler.HandleRequest(request);
                }
            }
        }
        public class ManagerHandler : LeaveRequestHandler
        {
            public override void HandleRequest(LeaveRequest request)
            {
                if (request.Days <= 5)
                {
                    Console.WriteLine("Leave request approved by manager");
                }
                else if (NextHandler != null)
                {
                    NextHandler.HandleRequest(request);
                }
            }
        }
        public class HRHandler : LeaveRequestHandler
        {
            public override void HandleRequest(LeaveRequest request)
            {
                if (request.Days <= 7)
                {
                    Console.WriteLine("Leave request approved by HR");
                }
                else
                {
                    Console.WriteLine("Leave request denied");
                }
            }
        }
        // LeaveRequest
        public class LeaveRequest
        {
            public int Days { get; set; }
        }

    }
}
namespace ChainOfResponsibilityPattern_责任链模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            LeaveRequestHandler supervisor = new SupervisorHandler();
            LeaveRequestHandler manager = new ManagerHandler();
            LeaveRequestHandler hr = new HRHandler();

            supervisor.SetNextHandler(manager);
            manager.SetNextHandler(hr);

            LeaveRequest request = new LeaveRequest { Days = 2 };
            supervisor.HandleRequest(request);

            request = new LeaveRequest { Days = 6 };
            supervisor.HandleRequest(request);

            request = new LeaveRequest { Days = 10 };
            supervisor.HandleRequest(request);

            Console.Read();

            //输出结果
            //Leave request approved by supervisor
            //Leave request approved by HR
            //Leave request denied
        }
    }
}

通过使用责任链模式,可以让多个对象都有机会处理请求,避免请求发送者和接收者之间的紧耦合关系。可以根据实际需求创建不同的责任链,并按照顺序进行处理。此外,责任链模式还具有灵活性,可以动态地改变链中的处理顺序或添加新的处理器。

标签:supervisor,request,模式,责任,ChainOfResponsibilityPattern,LeaveRequestHandler,new,Le
From: https://www.cnblogs.com/ZHIZRL/p/17647739.html

相关文章

  • TemplateMethodPattern-模板方法模式
    在C#中,模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。模板方法模式通过将公共的算法步骤抽象到基类中,并且通过在基类中定义一个模板方法来调用这些步骤,从而实现代码的复用和灵活性。模板方法模式有以下几个关键角......
  • 设计模式和七大原则概述及单一职责原则详解
    设计模式的目的编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的1.代码重用性(相同代码,不用重复编写)2.可读性(编程规范性,便于其他程序员的阅读和理解)3.可扩展性(当需要增加新的功能时,非常的方便)4.可靠......
  • InterpreterPattern-解释器模式
    在C#中,解释器模式(InterpreterPattern)是一种行为型设计模式,它定义了一种语言和解释器之间的关系,使得用户可以使用特定的语法解释表达式或操作。解释器模式有以下几个关键角色:AbstractExpression(抽象表达式):定义了解释器的抽象方法,所有具体表达式的共同父类。在C#中,可以使用抽象类......
  • ProxyPattern-代理模式
    在C#中,代理模式(ProxyPattern)是一种结构型设计模式,它允许通过创建一个代理对象来控制对其他对象的访问。代理对象充当着客户端和被代理对象之间的中间层,可以在访问对象时添加额外的功能,例如权限验证、延迟加载等。代理模式有以下几个关键角色:Subject(主题):定义了代理对象和真实对......
  • 深入理解MVVM架构模式
    MVVM原理MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动同步,从而降低代码的耦合度,提高应用程序的可维护性和可测试性。MVVM框架......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • LVS负载均衡之DR模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器(NFS共享服务搭建步骤)一、负载调度器配置(1)关闭selinux、firewalld、NetworkManager#关闭selinuxsed-i's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config#关闭firewalldsystemctlstopfirewalld......
  • 【Java设计模式005】代理模式
    概述大家好,个人gzh是大猪和小猪的小家,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以......
  • 复杂工厂模式
    目录前言导语代码部分前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语复杂工厂模式编辑代码部分```//第一步定义自行车的构造函数两个属性一个name和一个方法methodvarBicycleShop=function(name){this.name=name;this.method=function(){return......
  • 单体模式
    目录前言导语 代码部分总结前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语单体模式 编辑 代码部分//单体模式varSingleton=function(name){this.name=name;};Singleton.prototype.getName=function(){returnthis.name;}//获取实例对象......