• 责任链模式(管理流程)


    责任链模式(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、增加或修改请求的处理结构变得容易,增加了指派责任的灵活性。

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

  • 相关阅读:
    位记录——Windows 7已安装Sublime Text 3、cynwin、SublimeClang
    尺度空间(Scale space)理论
    D3DXMatrixMultiply 函数
    素数推断算法(高效率)
    去除win7 64位系统桌面图标小箭头
    Bag标签之中的一个行代码实行中文分词实例1
    7个最好的免费杀毒软件下载
    利用Excel批量高速发送电子邮件
    Hibernate Criterion
    IOS新手教程(二)-控制流
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11976230.html
Copyright © 2020-2023  润新知