《研磨设计模式》chap23 职责链模式chainOfResponsibility(3)功能扩展+总结
生活随笔
收集整理的這篇文章主要介紹了
《研磨设计模式》chap23 职责链模式chainOfResponsibility(3)功能扩展+总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 擴展
功能鏈:某個鏈處理完繼續向下傳遞。
public class SaleModel {//銷售的商品 private String goods;public String getGoods() {return goods;}public void setGoods(String goods) {this.goods = goods;} public String toString(){return "商品名稱="+goods+",銷售數量="+saleNum;} }public abstract class SaleHandler {//持有下一個處理請求的對象 protected SaleHandler successor = null;//設置下一個處理請求的對象 public void setSuccessor(SaleHandler successor){this.successor = successor;}//處理保存銷售信息的請求 public abstract boolean sale(String user,String customer,SaleModel saleModel); }public class SaleDataCheck extends SaleHandler{public boolean sale(String user, String customer, SaleModel saleModel) {//進行數據通用檢查,稍麻煩點,每個數據都要檢測if(user==null || user.trim().length()==0){System.out.println("申請人不能為空");return false;}if(customer==null || customer.trim().length()==0){System.out.println("客戶不能為空");return false;}if(saleModel==null ){System.out.println("銷售商品的數據不能為空");return false;}if(saleModel.getGoods()==null ||saleModel.getGoods().trim().length()==0){System.out.println("銷售的商品不能為空");return false;}if(saleModel.getSaleNum()==0){System.out.println("銷售商品的數量不能為0");return false;} //如果通過了上面的檢測,那就向下繼續執行return this.successor.sale(user, customer, saleModel);} }public class SaleSecurityCheck extends SaleHandler{ ... }public class SaleLogicCheck extends SaleHandler{ ... }public class GoodsSaleEbo {/*** 保存銷售信息,本來銷售數據應該是多條,太麻煩了,為了演示,簡單點* @param user 操作人員* @param customer 客戶* @param saleModel 銷售數據* @return 是否保存成功*/public boolean sale(String user,String customer,SaleModel saleModel){//如果全部在這里處理,基本的順序是//1:權限檢查//2:通用數據檢查(這個也可能在表現層已經作過了)//3:數據邏輯校驗//4:真正的業務處理//但是現在通過功能鏈來做,這里就主要負責構建鏈SaleSecurityCheck ssc = new SaleSecurityCheck();SaleDataCheck sdc = new SaleDataCheck();SaleLogicCheck slc = new SaleLogicCheck();SaleMgr sd = new SaleMgr();ssc.setSuccessor(sdc);sdc.setSuccessor(slc);slc.setSuccessor(sd);//向鏈上的第一個對象發出處理的請求return ssc.sale(user, customer, saleModel);} }public class Client {public static void main(String[] args) {//創建業務對象GoodsSaleEbo ebo = new GoodsSaleEbo();//準備測試數據SaleModel saleModel = new SaleModel();saleModel.setGoods("張學友懷舊經典");saleModel.setSaleNum(10);//調用業務功能ebo.sale("小李", "張三", saleModel);ebo.sale("小張", "李四", saleModel);} }2. 總結
2.1 優點
- 請求者和接收者松散耦合
在職責鏈模式中,請求者并不知道接收者是誰,也不知道具體如何處理,請求者只是負責向職責鏈發出請求就可以了。而每個職責對象也不用管請求者或者是其他的職責對象,只負責處理自己的部分,其他的就交給其他的職責對象去處理。也就是說,請求者和接收者是完全解耦的。 - 動態組合職責
職責鏈模式會把功能處理分散到單獨的職責對象中,然后在使用的時候,可以動態組合職責形成職責鏈,從而可以靈活地給對象分配職責,也可以靈活地實現和改變對象的職責。
2.2缺點
- 產生很多細粒度對象
職責鏈模式會把功能處理分散到單獨的職責對象中,也就是每個職責對象只處理一個方面的功能,要把整個業務處理完,需要很多職責對象的組合,這樣會產生大量的細粒度職責對象。不一定能被處理
2.3 職責鏈模式的本質:分離職責,動態組合。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的《研磨设计模式》chap23 职责链模式chainOfResponsibility(3)功能扩展+总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《研磨设计模式》chap23 职责链模式
- 下一篇: 《研磨设计模式》chap22 装饰模式D