LindDotNetCore~职责链模式的应用

回到目录

职责链模式

它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择!
下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

职责链模式组成

  1. 三大对象
  2. 命令处理
  3. 处理流程
  4. 命令上下文
  • 命令只负责组织各个流程的次序,对流程实现细节没兴趣
  • 具体流程只实现自己关注的代码,对下一个流程未知

     在具体代码中的体现

    抽象命令
    c# public interface ICommand { void Execute(CommandParameters parameters); }
    抽象流程

     /// <summary>
     /// 工作流-抽象处理者
     /// </summary>
     public abstract class WorkFlow
     {
     protected WorkFlow Next; // 定义后继对象
     protected object SharedObj;  // 共享对象
    
     // 设置后继者
     public WorkFlow SetNext(WorkFlow next)
     {
         Next = next;
         return next;
     }
    
     // 抽象请求处理方法
     public virtual void ProcessRequest(CommandParameters command)
     {
         if (Next != null)
             Next.ProcessRequest(command);
     }
     }

    命令需要把参数传递给每个工作流程

      public class CommandParameters
      {
      public string CommandType { get; set; }
      public string JsonObj { get; set; }
    
      public CommandParameters(string type, string jsonObj)
      {
          CommandType = type;
          JsonObj = jsonObj;
      }
      }

    下面看一个职责链模式里的具体命令和具体流程(步骤),每个步骤可以设置它下一步是什么

      public class CommandInsert : ICommand
      {
    
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertLogger();
          workFlow.SetNext(new WorkFlow_InsertAudit());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class CommandUpdate : ICommand
      {
      public void Execute(CommandParameters parameters)
      {
          WorkFlow workFlow = new WorkFlow_InsertAudit();
          workFlow.SetNext(new WorkFlow_InsertLogger());
          workFlow.ProcessRequest(parameters);
      }
      }
      public class WorkFlow_InsertLogger : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow1");
          ProcessRequest(command);
      }
      }
      public class WorkFlow_InsertAudit : WorkFlow
      {
      public override void ProcessRequest(CommandParameters command)
      {
          System.Console.WriteLine("WorkFlow2");
          ProcessRequest(command);
      }
      }
      public class ChainResponsibility
      {
      [Fact]
      public void Test1()
      {
          var command = new CommandInsert();
          command.Execute(new CommandParameters("test", "OK"));
      }
    
      [Fact]
      public void Test2()
      {
          var command = new CommandUpdate();
          command.Execute(new CommandParameters("test", "OK"));
      }
      }

    待续……
    回到目录

原文地址:https://www.cnblogs.com/lori/p/8261200.html

时间: 2024-11-05 10:45:28

LindDotNetCore~职责链模式的应用的相关文章

[设计模式]&lt;6&gt;. C++与职责链模式(chain of rsponsibility pattern)

默默地EEer,原文地址: http://www.cnblogs.com/hebaichuanyeah/p/5625233.html 职责链模式指使多个对象多有机会处理请求,避免请求发送者和接受者的耦合关系. 将这些接受处理的对象连成一条链,并沿着该链处理请求. 一个传说中的应用情景: 假如去政府部门办事,遇到了打字员小丽,在打LOL的小张以及主任老李,互相踢皮球推脱. #include <iostream> using namespace std; class Handler { prote

职责链模式

1.职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,指导有一个对象处理它为止. 2.优点:(1).当客户提交一个申请时,请求是沿链传递直至有一个对象负责处理它位置.在客户端根本不需要知道是谁做的处理.(2).简化对象的相互连接,它们仅需要保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用.(3).可以随时增加或者修改处理一个请求的结构.增强了给对象纸牌职责的灵活性. 3.注意:一个请求极有可能到链的末端都

设计模式之行为型模式—— 3.5 职责链模式

<?php /**  * 3.5 职责链模式  *  定义:  *  使多个对象都有机会处理请求,从而避免请求的  *  发送者和接受者直接的耦合关系.将这个对象连  *  成一条链,并沿着这条链传递该请求,直到有一  *  个对象处理它为止.  *  角色:  *  1. 抽象Handler类  *  职责:定义一个处理请示的接口.  *  2. 具体Handler类  *  职责:具体处理者类,处理它所负责的请求  *    ,它可访问它的后继者,如果可处理  *    该请求,就处理之,否

大话设计模式C++实现-第24章-职责链模式

一.UML图 二.概念 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止. 三.说明  角色: (1)Handler类:定义一个处理请求的接口. (2)ConcreteHandler类:具体的处理请求的接口. 职责链模式的好处: (1)最关键的是,当客户提交一个请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它. (2)

职责链模式——机房收费系统下机结账

在机房收费系统中,学生下机结账最让人头疼了.因为学生的消费时间(下机时间-上机时间-上机准备时间)有三种情况: 1.消费时间<=0,也就是下机时间与上机时间的间隔在上机准备时间范围内,这种情况是不收费的. 2.消费时间<=最少上机时间,这种情况下消费时间按照最少上机时间收费. 3.消费时间>最少上机时间,这种情况还要考虑递增单位时间.比如递增单位时间是10分钟,消费时间是42分 钟,42/10=4.....2,这种情况要按照50分钟收费. 以上消费时间就分了三种情况,更复杂的是第二种和第

职责链模式Chain of Responsibility

1.简介 1)模式概述:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它位置. 2)核心: 2.UML与代码实现 1)结构:UML 模式组成: 抽象处理者角色(Handler:Approver):定义一个处理请求的接口,和一个后继连接(可选) 具体处理者角色(ConcreteHandler:President):处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者. 客户类

VB.NET &amp; 职责链模式

前几天一直在讲设计模式,在和师哥师姐的讨论过程中,发现能在机房收费个人重构版中用到好几个设计模式,首先来讨论讨论职责链模式: 首先当看见这个模式的第一眼就觉得这是一个很简单的模式,可是当使用起来真的得考虑许多,首先要明白什么是链?链是一系列节点的集合,可以灵活拆分再重组.这也是与 链表不同的地方,用户可以去访问节点中的任何一点作为开始节点. 定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 举

学习日记之职责链模式和Effective C++

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着该条链传递该请求,直到有一个对象处理它为止. (1),当客户提交一个请求时,请求时沿着链传递直到有一个 ConcreteHandler 对象负责处理它. (2),接收者和发送者都没有对方的明确信息,切链中的对象自己也不知道链的结构.结果是职责链可简化为对象之间的连接,它们仅需保留一个指向其后继者的引用.而不惜保留它所有的候选接收者的引用

(20):(行为型模式) Chain Of Responsibility 职责链模式

(20):(行为型模式) Chain Of Responsibility 职责链模式,布布扣,bubuko.com