LindDotNetCore~职责链模式的应用
回到目录
职责链模式
它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择!
下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
职责链模式组成
- 三大对象
- 命令处理
- 处理流程
- 命令上下文
- 命令只负责组织各个流程的次序,对流程实现细节没兴趣
- 具体流程只实现自己关注的代码,对下一个流程未知
在具体代码中的体现
抽象命令
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"));}}
待续……
回到目录
LindDotNetCore~职责链模式的应用相关推荐
- 设计模式之职责链模式(Chain of Responsibility)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 职责链模式里面必须要知道的事情
为什么80%的码农都做不了架构师?>>> 职责链模式里面必须要知道的事情 用java web开发的很多同学很容易沉迷于各种框架的使用技巧,而忽略servlet的一些细节.对很多 ...
- 职责链模式(Chain of Responsibility)(对象行为型)
1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ...
- Python设计模式-职责链模式
Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...
- 设计模式之职责链模式、减小了因为分支带来的耦合
1. 定义 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一 ...
- 22.Chain of Responsibility(职责链)模式
技术交流QQ群:1027579432,欢迎你的加入! 1.Chain of Responsibility(职责链)模式动机 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个 ...
- 漫画设计模式:什么是 “职责链模式” ?
作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) ----- 第二天 ----- ------------ 在一家公司里,有三个程序员,他们的名字分别是小A.小B ...
- C#设计模式之二十职责链模式(Chain of Responsibility Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第八个模式,该模式是[职责链模式],英文名称是:Chain of Responsibility Pattern.让我们看看现实生活中的例 ...
- 职责链模式(chain of responsibility)
原文地址 一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不 ...
最新文章
- NOIP2015年普级组试题 金币
- Java EE安全性API向前发展
- sublime批量添加注释
- 基于Android的人脸门禁系统
- 微软苏州招 Android/iOS 开发!
- mpeg4和mp4格式一样吗?
- Unity动画系统学习方向
- 信号完整性和电源完整性基本介绍
- SVM-支持向量机理解(拉格朗日乘子法(Lagrange multiplier))
- 如何用python编程能实现输入诗句的上句显示下句_Python爬虫之诗歌接龙
- 利用opencv带你玩转人脸识别-上篇(读取图片,灰度转换,尺寸修改,绘制矩形快速入门)
- 隐藏程序在任务栏的图标
- 排列组合思维导图_思维模型10 - Permutations and Combinations | 排列组合
- 一个小小的里程碑!啥也不说了,签名书奉上!
- 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)
- 读文献 THE HSIC BOTTLENECK: DEEP LEARNING WITHOUT BACK-PROPAGATION 阅读心得
- 【Linux内核驱动】驱动模块Modules
- ./configure make make install 编译安装和卸载 (Linux)
- 静态分析反调试apk
- 哈尔滨工业大学与山东大学相比考研计算机科学与技术哪个好考,计算机考研,我该选浙大还是哈工大?...
热门文章
- 3d怎么把两个面拼接在一起_vr全景看房用什么软件做的?3D看房是怎么拍摄的?...
- mysql sum函数返回类型_MySQL的sum函数返回的门类
- python爬取网站数据步骤_python怎么爬取数据
- slot传函数 vue_面试必备 Vue 知识点
- python django restful框架_Django RESTful API 实例带你快速上手开发
- python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码
- 数据存储方式_视频监控系统的数据存储方式的概念及应用
- 怎么复活不了睡袋_测评 | 萌新的北京冬季户外睡袋初体验
- linux ntp时间立即同步命令_记一次生产环境部署NTP服务及配置时间同步
- C语言 实现登录注册功能