zoukankan      html  css  js  c++  java
  • 责任链模式(管理流程)

    责任链模式(Chain of Responsibility):

      使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一对像处理它为止。

      

    一、UML结构图

    二、代码示例

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 责任链模式
     7 {
     8     class Program
     9     {
    10         static void Main(string[] args)
    11         {
    12             Handle hA=new ConcreteHandleA();
    13             Handle hB = new ConcreteHandleB();
    14             Handle hC = new ConcreteHandleC();
    15 
    16             hA.SetNextHandle(hB);
    17             hB.SetNextHandle(hC);
    18 
    19             hA.HandleRequest();
    20 
    21             Console.Read();
    22         }
    23     }
    24 
    25     /// <summary>
    26     /// 请求处理类
    27     /// </summary>
    28     public abstract class Handle
    29     {
    30         protected Handle m_NextHandle;
    31         public void SetNextHandle(Handle handle)
    32         {
    33             m_NextHandle = handle;
    34         }
    35 
    36         public abstract void HandleRequest();
    37     }
    38 
    39     public class ConcreteHandleA : Handle
    40     {
    41         public override void HandleRequest()
    42         {
    43             //判断自身能否处理
    44             Console.WriteLine("ConcreteHandleA 正在处理自己那部分(请假申请,A审批)...");
    45 
    46             //交由下一个人员
    47             if (m_NextHandle != null)
    48                 m_NextHandle.HandleRequest();
    49         }
    50     }
    51 
    52     public class ConcreteHandleB : Handle
    53     {
    54         public override void HandleRequest()
    55         {
    56             //判断自身能否处理
    57             Console.WriteLine("ConcreteHandleB 正在处理自己那部分(请假申请,B审批)...");
    58 
    59             //交由下一个人员
    60             if (m_NextHandle != null)
    61                 m_NextHandle.HandleRequest();
    62         }
    63     }
    64 
    65     public class ConcreteHandleC : Handle
    66     {
    67         public override void HandleRequest()
    68         {
    69             //判断自身能否处理
    70             Console.WriteLine("ConcreteHandleC 正在处理自己那部分(请假申请,C审批)...");
    71 
    72             //交由下一个人员
    73             if (m_NextHandle != null)
    74                 m_NextHandle.HandleRequest();
    75         }
    76     }
    77 
    78 }
    代码示例

    三、作用

    1、请求者和接受者解耦合

    2、增加或修改请求的处理结构变得容易,增加了指派责任的灵活性。

    需要注意的是:防止一个请求,到结尾也都没有能够处理的对象。

  • 相关阅读:
    基数排序
    希尔排序
    归并排序
    选择排序
    冒泡排序
    堆排序
    快速排序
    Python selenium 4种常用定位 id,class_name,text,xpath
    python selenium 用索引值定位
    python pycharm 建立新项目时使用上个项目所下载的第三方库方法
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11976230.html
Copyright © 2011-2022 走看看