成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇了解責任鏈模式

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

 [[411174]]

本文轉載自微信公眾號「我好困啊」,作者mengxin。轉載本文請聯系我好困啊公眾號。

責任鏈模式:

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

意圖

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

主要解決

職責鏈上的處理者負責處理請求,請求發起者將請求發送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞。

關鍵代碼

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

優點

1.降低了耦合

2.簡化了對象,使得對象不需要知道責任鏈的具體實現

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

使用場景

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

示例圖:

具體實現

創建用戶類

  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} 

創建各種組裝器

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

ID組裝器

  1. 1/** 
  2. 2 * ID 組裝器 
  3. 3 */ 
  4. 4public class IdSeter implements Seter<User>{ 
  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<User>{ 
  6. 7    @Override 
  7. 8    public void doSet(User user) { 
  8. 9        user.setName("mengxin"); 
  9. 0    } 

接下來定義責任鏈,將組裝器連接起來

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

用戶責任鏈

  1.  1/** 
  2.  2 * 用戶責任鏈 
  3.  3 */ 
  4.  4public class UserChain implements Chain<User>{ 
  5.  5 
  6.  6    private final List<Seter<User>> seters = new LinkedList<>(); 
  7.  7 
  8.  8    //初始化(組裝責任鏈),注入seter處理器處理 
  9.  9    public UserChain(){ 
  10. 10        //注入id設置器 
  11. 11        seters.add(new IdSeter()); 
  12. 12        //注入名稱設置器 
  13. 13        seters.add(new NameSeter()); 
  14. 14    } 
  15. 15 
  16. 16    /** 
  17. 17     * 用戶責任鏈,調用seter,組裝參數 
  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} 

測試調用

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

 

 

責任編輯:武曉燕 來源: 我好困啊
相關推薦

2021-07-28 10:02:54

建造者模式代碼

2022-03-07 06:34:22

CQRS數據庫數據模型

2022-11-01 08:46:20

責任鏈模式對象

2023-09-26 00:27:07

設計模式鏈接

2022-06-15 08:17:13

OA系統數據

2022-12-19 08:14:30

注解開發配置

2022-10-26 07:39:36

MVCC數據庫RR

2021-05-20 06:57:16

RabbitMQ開源消息

2021-12-24 07:50:45

責任鏈模式設計

2024-01-30 13:15:00

設計模式責任鏈

2012-03-28 13:28:56

Java設計模式

2022-12-28 08:08:57

2021-10-28 19:15:02

IPUARM

2021-07-10 09:02:42

編程語言 TypeScript

2020-10-09 08:15:11

JsBridge

2023-06-16 07:41:36

分層架構軟件架構

2024-12-03 15:52:45

責任鏈Java

2010-04-01 09:10:03

PHP設計模式責任鏈模式

2021-12-30 09:38:51

DDoS攻擊防范

2022-06-08 00:10:33

數據治理框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产91丝袜在线播放 | 亚洲综合在 | 久久精品免费观看 | 国产xxxx岁13xxxxhd| 本道综合精品 | 欧美日韩三级视频 | 粉嫩一区二区三区性色av | 亚洲国产一区视频 | 国产亚洲精品久久yy50 | 亚洲综合精品 | 亚洲精品久久久久久一区二区 | 欧美在线一级 | 国产小视频在线看 | 国产精品一区二区欧美黑人喷潮水 | 午夜激情免费视频 | 国产精品小视频在线观看 | 久久成人免费观看 | 99热这里都是精品 | 每日在线更新av | 日韩av手机在线观看 | 国产中文字幕网 | 亚洲一区国产精品 | 天天躁日日躁xxxxaaaa | 久久成人精品一区二区三区 | 精品1区2区3区 | 国产成人精品a视频一区www | 五月天婷婷丁香 | 日本福利片| 波多野结衣av中文字幕 | 久久av在线播放 | 亚洲精品电影 | 免费一看一级毛片 | 久久国产精品精品国产色婷婷 | 日韩欧美在线免费观看 | 国产999精品久久久 精品三级在线观看 | 日本成人在线观看网站 | 日本久久综合 | 天天av网 | 手机三级电影 | 亚洲欧美中文日韩在线 | 欧美视频二区 |