日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《研磨设计模式》chap23 职责链模式chainOfResponsibility(1)模式简介

發布時間:2025/3/21 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap23 职责链模式chainOfResponsibility(1)模式简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景:申請經費,有好幾個領導審批,項目經理、部門經理、總經理,最后總會有一個人回復審批結果。

1. 正常編碼

public class FeeRequest {//提交聚餐費用申請給項目經理 public String requestToProjectManager(String user,double fee){String str = "";if(fee < 500){//項目經理的權限比較小,只能在500以內str = this.projectHandle(user, fee);}else if(fee < 1000){//部門經理的權限只能在1000以內str = this.depManagerHandle(user, fee);}else if(fee >= 1000){//總經理的權限很大,只要請求到了這里,他都可以處理str = this.generalManagerHandle(user, fee);}return str;}//項目經理審批費用申請,參數、返回值和上面是一樣的,省略了 private String projectHandle(String user, double fee) {String str = "";//為了測試,簡單點,只同意小李的if("小李".equals(user)){str = "項目經理同意"+user+"聚餐費用"+fee+"元的請求";}else{//其他人一律不同意str = "項目經理不同意"+user+"聚餐費用"+fee+"元的請求";}return str;}//部門經理審批費用申請,參數、返回值和上面是一樣的,省略了 private String depManagerHandle(String user, double fee) {String str = "";//為了測試,簡單點,只同意小李申請的if("小李".equals(user)){str = "部門經理同意"+user+"聚餐費用"+fee+"元的請求";}else{//其他人一律不同意str= "部門經理不同意"+user+"聚餐費用"+fee+"元的請求";}return str;}//總經理審批費用申請,參數、返回值和上面是一樣的,省略了 private String generalManagerHandle(String user, double fee) {String str = "";//為了測試,簡單點,只同意小李的if("小李".equals(user)){str = "總經理同意"+user+"聚餐費用"+fee+"元的請求";}else{//其他人一律不同意str = "總經理不同意"+user+"聚餐費用"+fee+"元的請求";}return str;} }public class Client {public static void main(String[] args) {FeeRequest request = new FeeRequest();//開始測試String ret1 = request.requestToProjectManager("小李", 300);System.out.println("the ret1="+ret1); String ret2 = request.requestToProjectManager("小張", 300);System.out.println("the ret2="+ret2);String ret3 = request.requestToProjectManager("小李", 600);System.out.println("the ret3="+ret3); String ret4 = request.requestToProjectManager("小張", 600);System.out.println("the ret4="+ret4);String ret5 = request.requestToProjectManager("小李", 1200);System.out.println("the ret5="+ret5); String ret6 = request.requestToProjectManager("小張", 1200);System.out.println("the ret6="+ret6);} }

抽象問題:客戶端發出一個請求,會有很多對象都可以來處理這個請求,而且不同對象的處理邏輯是不一樣的。還希望處理流程是可以靈活變動的,而處理請求的對象需要能方便地修改或者是被替換掉,以適應新的業務功能的需要。

2. 模式介紹

public abstract class Handler { protected Handler successor; //持有后繼的職責對象 //設置后繼的職責對象 public void setSuccessor(Handler successor) {this.successor = successor;}//持有后繼的職責對象 示意處理請求的方法,雖然這個示意方法是沒有傳入參數,但實際是可以傳入參數的,根據具體需要來選擇是否傳遞參數 public abstract void handleRequest(); }public class ConcreteHandler1 extends Handler {public void handleRequest() {//根據某些條件來判斷是否屬于自己處理的職責范圍//判斷條件比如:從外部傳入的參數,或者這里主動去獲取的外部數據,//如從數據庫中獲取等,下面這句話只是個示意boolean someCondition = false;if(someCondition){//如果屬于自己處理的職責范圍,就在這里處理請求//具體的處理代碼System.out.println("ConcreteHandler1 handle request");}else{//如果不屬于自己處理的職責范圍,那就判斷是否還有后繼的職責對象//如果有,就轉發請求給后繼的職責對象//如果沒有,什么都不做,自然結束if(this.successor!=null){this.successor.handleRequest();}}} }public class ConcreteHandler2 extends Handler { ... }public class Client {public static void main(String[] args) {//先要組裝職責鏈Handler h1 = new ConcreteHandler1();Handler h2 = new ConcreteHandler2();h1.setSuccessor(h2); //然后提交請求h1.handleRequest();} }

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap23 职责链模式chainOfResponsibility(1)模式简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。