日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一篇了解責(zé)任鏈模式

 [[411174]]

本文轉(zhuǎn)載自微信公眾號「我好困啊」,作者mengxin。轉(zhuǎn)載本文請聯(lián)系我好困啊公眾號。

邛崍ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

責(zé)任鏈模式:

定義一條加工鏈,請求發(fā)起者發(fā)起請求(原料),請求(原料)通過這條加工鏈進行一步步的處理后。輸出最終的產(chǎn)品產(chǎn)出。

意圖

請求的發(fā)起者和接收者,通過這條加工鏈條,進行解耦。將各種處理器進行連接,形成一條加工鏈條,請求一步步的進行傳遞,進行處理,直到處理完畢輸出。

主要解決

職責(zé)鏈上的處理者負責(zé)處理請求,請求發(fā)起者將請求發(fā)送到職責(zé)鏈上即可,無須關(guān)心請求的處理細節(jié)和請求的傳遞。

關(guān)鍵代碼

將各種職責(zé)處理器進行一步步連接,組裝成一條責(zé)任鏈。

優(yōu)點

1.降低了耦合

2.簡化了對象,使得對象不需要知道責(zé)任鏈的具體實現(xiàn)

3.增強給對象指派職責(zé)的靈活性。如新增一個職責(zé)只需要加處理器加工到鏈上即可。

使用場景

有多個對象可以處理同一個請求。比如:定義了一個用戶對象,需要對這個用戶對象進行一系列處理。那么可以將各種處理抽象成處理器,將各種處理器進行連接形成一條加工鏈。將對象送入到加工鏈上進行處理。

示例圖:

具體實現(xiàn)

創(chuàng)建用戶類

 
 
 
 
  1.  1/** 
  2.  2 * 用戶對象,對其進行加工 
  3.  3 */ 
  4.  4@Data 
  5.  5@AllArgsConstructor 
  6.  6@NoArgsConstructor 
  7.  7public class User { 
  8.  8 
  9.  9    private int id; 
  10. 10 
  11. 11    private String name; 
  12. 12 
  13. 13} 

創(chuàng)建各種組裝器

 
 
 
 
  1. 1/** 
  2. 2 * 組裝器(處理者) 
  3. 3 */ 
  4. 4public interface Seter { 
  5. 6    //設(shè)置參數(shù) 
  6. 7    void doSet(T request); 
  7. 8} 

ID組裝器

 
 
 
 
  1. 1/** 
  2. 2 * ID 組裝器 
  3. 3 */ 
  4. 4public class IdSeter implements Seter
  5. 6    @Override 
  6. 7    public void doSet(User user) { 
  7. 8        user.setId(1); 
  8. 9    } 
  9. 0} 

name組裝器

 
 
 
 
  1. 1/** 
  2. 2 *  
  3. 3 * name 組裝器 
  4. 4 */ 
  5. 5public class NameSeter implements Seter
  6. 7    @Override 
  7. 8    public void doSet(User user) { 
  8. 9        user.setName("mengxin"); 
  9. 0    } 

接下來定義責(zé)任鏈,將組裝器連接起來

 
 
 
 
  1. 1/** 
  2. 2 * 責(zé)任鏈模式(抽象責(zé)任鏈,可定義多種鏈) 
  3. 3 */ 
  4. 4public interface Chain { 
  5. 6    //組裝 
  6. 7    void assemble(T request); 
  7. 9} 

用戶責(zé)任鏈

 
 
 
 
  1.  1/** 
  2.  2 * 用戶責(zé)任鏈 
  3.  3 */ 
  4.  4public class UserChain implements Chain
  5.  5 
  6.  6    private final List> seters = new LinkedList<>(); 
  7.  7 
  8.  8    //初始化(組裝責(zé)任鏈),注入seter處理器處理 
  9.  9    public UserChain(){ 
  10. 10        //注入id設(shè)置器 
  11. 11        seters.add(new IdSeter()); 
  12. 12        //注入名稱設(shè)置器 
  13. 13        seters.add(new NameSeter()); 
  14. 14    } 
  15. 15 
  16. 16    /** 
  17. 17     * 用戶責(zé)任鏈,調(diào)用seter,組裝參數(shù) 
  18. 18     * @param request 
  19. 19     */ 
  20. 20    @Override 
  21. 21    public void assemble(User request) { 
  22. 22        seters.forEach(userSeter -> userSeter.doSet(request)); 
  23. 23    } 
  24. 24} 

測試調(diào)用

 
 
 
 
  1.  1/** 
  2.  2 * 責(zé)任鏈測試類 
  3.  3 */ 
  4.  4public class Test { 
  5.  5 
  6.  6 
  7.  7    public static void main(String[] args) { 
  8.  8        //用戶責(zé)任鏈 
  9.  9        UserChain userChain = new UserChain(); 
  10. 10        User user = new User(); 
  11. 11        //調(diào)用責(zé)任鏈,設(shè)置參數(shù) 
  12. 12        userChain.assemble(user); 
  13. 13        //加工完后獲取到的對象值 
  14. 14        System.out.println(user.getId()+","+user.getName()); 
  15. 15    } 
  16. 16} 

本文標題:一篇了解責(zé)任鏈模式
文章起源:http://www.5511xx.com/article/cdcepjj.html