LindDotNetCore~职责链模式的应用
2018-01-10 22:32
393 查看
回到目录
下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
命令处理
处理流程
命令上下文
命令只负责组织各个流程的次序,对流程实现细节没兴趣
具体流程只实现自己关注的代码,对下一个流程未知
抽象流程
命令需要把参数传递给每个工作流程
下面看一个职责链模式里的具体命令和具体流程(步骤),每个步骤可以设置它下一步是什么
待续……
回到目录
职责链模式
它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择!下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
职责链模式组成
三大对象命令处理
处理流程
命令上下文
命令只负责组织各个流程的次序,对流程实现细节没兴趣
具体流程只实现自己关注的代码,对下一个流程未知
在具体代码中的体现
抽象命令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")); } }
待续……
回到目录
相关文章推荐
- LindDotNetCore~Mock对实际应用中的意义
- 白话设计模式--实践应用--Chain of Responsibility(职责链)和factory模式
- 设计模式-职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用
- iOS应用设计模式开发中职责链(责任链)模式的实现解析
- LindDotNetCore~基于模块化注入的介绍
- 设计模式的应用场景(17)--职责链模式
- LindDotNetCore~Scheduling任务调度模块的介绍
- .Net Core自动化部署之利用docker版jenkins部署dotnetcore应用的方法
- iOS应用设计模式开发中职责链(责任链)模式的实现解析
- ios框架中UIResponder的职责链设计模式应用
- LindDotNetCore~Polly组件对微服务场景的价值
- 职责链模式的应用
- LindDotNetCore~ISoftDelete软删除接口
- 项目设计之---------- 职责链模式应用
- LindDotNetCore~docker里图像上生成中文乱码问题
- 基于EF Core的Code First模式的DotNetCore快速开发框架
- 项目设计之---------- 职责链模式应用
- 职责链模式应用——下机(机房重构知识点总结)
- LindDotNetCore~Aspect面向方面编程
- 职责链模式在开发中的应用