LindDotNetCore~職責鏈模式的應用

回到目錄

職責鏈模式

它是一種設計模塊,主要將操作流程與具體操作解耦,讓每個操作都可以設置自己的操作流程,這對于工作流應用是一個不錯的選擇!
下面是官方標準的定義:責任鏈模式是一種設計模式。在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。

職責鏈模式組成

  1. 三大對象
  2. 命令處理
  3. 處理流程
  4. 命令上下文
  • 命令只負責組織各個流程的次序,對流程實現細節沒興趣
  • 具體流程只實現自己關注的代碼,對下一個流程未知

 在具體代碼中的體現

抽象命令

 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"));}}

待續……
回到目錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MR程序的幾種提交運行模式

MR程序的幾種提交運行模式 本地模型運行 1/在windows的eclipse里面直接運行main方法&#xff0c;就會將job提交給本地執行器localjobrunner執行 ----配置path&#xff1a;D:\hadoop-2.7.2\bin ----配置hadoop_home&#xff1a;D:\hadoop-2.7.2 ----復制 hadoop.dll和winutil…

構件之法讀書筆記04

我們前兩周我們團隊一起制作了一個大學生記賬軟件&#xff0c;但是我們沒有對我們的軟件進行測試&#xff0c;只要是這個功能能夠順利進行&#xff0c;我們就覺得OK。 其實&#xff0c;我認為我們的軟件是有問題的&#xff0c;對于一些極限的操作能否完成&#xff0c;在各種環境…

零點起飛學java視頻_零點起飛學java (劉升華) 高清PDF_IT教程網

資源名稱&#xff1a;零點起飛學java (劉升華) 高清PDF第1篇 java開發基礎第1章 java概述( 教學視頻&#xff1a;37分鐘) 2第2章 基本數據類型及運算( 教學視頻&#xff1a;52分鐘) 14第3章 java程序流程控制( 教學視頻&#xff1a;33分鐘) 36第4章 類與對…

【Spark】開發Spark選擇Java還是Scala?

Spark-Java-Scala-哪種語言 spark java 支持_百度搜索(1 封私信)Spark 中用 Scala 和 java 開發有什么區別&#xff1f; - 知乎(1 封私信)Spark平臺下&#xff0c;scala比java更有優勢么&#xff1f; - 知乎

vector 修改 java_java對vector動態數組中的對象排序,以下代碼有何問題,如何修改?...

展開全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化與java的序列化區別

java的序列化機制 java序列化時會把具體類的數據和類的繼承結構信息都序列化傳遞。如下圖hadoop的序列化機制 序列化類的數據&#xff0c;但是不序列化類的繼承結構信息。 網絡傳遞的時候就少了很多流量&#xff0c;hadoop也不需要類的繼承關系&#xff0c;只要類的數據就夠…

java mail 已發送_JavaMail獲取已發送郵件

public static voidmain(String args[]) {Properties props new Properties(); //參數配置props.setProperty("mail.transport.protocol", "smtp"); //使用的協議(JavaMail規范要求)props.setProperty("mail.smtp.host", "smtp.exmail.qq.c…

ORA-08103: object no longer exists

今天工具箱報錯&#xff1a; ORA-08103: object no longer exists 查了原因&#xff0c;是有session在操作表&#xff0c;比如插入&#xff0c;更新等。而工具箱這個操作剛好在select表&#xff0c;所以報錯。-------下文是英文解釋----- ORA-08103: object no longer exists錯…

【Spark】Spark-空RDD判斷與處理

Spark-空RDD判斷與處理 SparkKafkaDemo - Streaming Statisticsrdd isempty count_百度搜索Spark RDD.isEmpty costs much time - Stack OverflowSpark Streaming中空RDD的處理-Spark-about云開發[SPARK-5270] Provide isEmpty() function in RDD API - ASF JIRA19 Spark Stre…

JDBC開發步驟

JDBC開發步驟&#xff1a; 1、加載數據庫驅動 2、通過DriverManager獲取數據庫連接Connection 3、通過Connection獲取Statement/PreparedStatement 4、將SQL語句綁定到Statement/PreparedStatement中去&#xff0c;準備向數據庫發送SQL語句 5、執行完sql語句后&#xff0c…

DAY3-“忙里偷閑”找你玩耍2018-1-11

接觸Java第三天&#xff0c;嘿嘿&#xff0c;今天近代史期末考試&#xff0c;提前一小時交卷&#xff0c;回宿舍繼續學習&#xff0c;中午去見女神姐姐了&#xff0c;每次見完女神姐姐都是滿滿地動力。這次女神姐姐告訴我們要好好規劃自己的時間&#xff0c;早上花20分鐘規劃好…

java 數據保存內存_java中的各種數據類型在內存中存儲的方式 一

1.java是如何管理內存的java的內存管理就是對象的分配和釋放問題。(其中包括兩部分)分配&#xff1a;內存的分配是由程序完成的&#xff0c;程序員需要通過關鍵字new為每個對象申請內存空間(基本類型除外)&#xff0c;所有的對象都在堆(Heap)中分配空間。釋放&#xff1a;對象的…

Gradle學習之構建java與web項目

一.使用Gradle的java插件構建Java項目 1&#xff09;Gradle插件包含了若干個接口定義和已有的任務項&#xff0c;語法結構&#xff1a;apply plugin:插件名 ,此處我們定義插件 apply plugin : java 2&#xff09;Gradle希望我們的java項目需要遵循以下規范&#xff1a; src/mai…

Hibernate單表開發步驟

Hibernate單邊開發步驟&#xff1a; 1、創建Configuration&#xff0c;加載src/hibernate.cfg.xml配置文件&#xff0c;該配置文件中又去加載Hello.hbm.xml映射文件。 2、通過Configuration創建重量級SessionFactory。重量級&#xff1a;創建慢&#xff0c;內存占用大&#…

基于ssm出租車管理系統的設計與實現論文

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本出租車管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&…

redission java_Java注解如何基于Redission實現分布式鎖

這篇文章主要介紹了Java注解如何基于Redission實現分布式鎖,文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下1、定義注解類Target({ ElementType.METHOD })Retention(RetentionPolicy.RUNTIME)Documentedpublic i…

Spring Security源碼分析四:Spring Social實現微信社交登錄

2019獨角獸企業重金招聘Python工程師標準>>> 社交登錄又稱作社會化登錄&#xff08;Social Login&#xff09;&#xff0c;是指網站的用戶可以使用騰訊QQ、人人網、開心網、新浪微博、搜狐微博、騰訊微博、淘寶、豆瓣、MSN、Google等社會化媒體賬號登錄該網站。 前言…

jdbc開發優缺點

1&#xff09;優點&#xff1a;簡單易學,上手快,非常靈活構建SQL&#xff0c;效率高 2&#xff09;缺點&#xff1a;代碼繁瑣&#xff0c;難以寫出高質量的代碼&#xff08;例如&#xff1a;資源的釋放&#xff0c;SQL注入安全性等&#xff09; 開發者既要寫業務邏輯&#xff0…

java numberformat 方法_Java NumberFormat parse()用法及代碼示例

parse(str)方法是java.text.NumberFormat的內置方法&#xff0c;該方法從給定字符串的開頭解析文本以產生數字。該方法可能不使用給定字符串的整個文本用法:public Number parse?(String str)參數&#xff1a;該函數接受一個字符串str&#xff0c;其開頭應進行分析。返回值&am…

hibernate開發優缺點

1&#xff09;優點&#xff1a;不用寫SQL&#xff0c;完全以面向對象的方式設計和訪問&#xff0c;不用管底層具體數據庫的語法&#xff0c;&#xff08;例如&#xff1a;分頁&#xff09;便于理解。 2&#xff09;缺點&#xff1a;處理復雜業務時&#xff0c;靈活度差, 復雜的…