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

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

  • 相关阅读:
    微信小程序里自定义组件,canvas组件没有效果
    微信小程序填坑之路(三):布局适配方案(rpx、px、vw、vh)
    小程序checkbox调整大小
    css让文字竖着排列 writing-mode 属性
    微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题
    小程序国际化实现方式
    mybatis plus 学习
    cesium js学习一加载三维模型【转】
    cesiumjs学习笔记之三——cesium-navigation插件 【转】
    局域网Cesium离线影像及瓦片影像地图加载【转】
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11976230.html
Copyright © 2011-2022 走看看