java設計模式-委派模式


導讀:

        委派模式不屬於23種設計模式,在平常其他設計模式中可能也有體現。同樣在現實生活中也有相關的體現,比如一個具體任務的執行,首先是經過高層領導討論,將具體的任務委派給相關部門經理,部門經理拿到任務通知后去委派相關的員工具體執行任務,委派任務的角色實際並非具體執行任務,而是對任務分發,執行過程進行管理。

參考類圖:

代碼:

1.抽象的服務類接口,提供執行任務的方法

1 //公共的服務接口
2 public interface BaseService {
3     // 執行命令的方法
4     void execute();
5 }

2.具體的服務類,執行相應的任務

1 //后台代碼
2 public class CodeService implements BaseService {
3 
4     @Override
5     public void execute() {
6         System.out.println("執行后台代碼開發任務");
7     }
8 
9 }
1 //前台頁面
2 public class FrontService implements BaseService {
3 
4     @Override
5     public void execute() {
6         System.out.println("執行前端頁面設計任務");
7     }
8 
9 }

3.委派者角色,負責委派,分發任務,最后提交執行的結果

 1 //委派任務角色
 2 public class Delegator {
 3     // 用一個容器存放不同的子任務對應的執行對象
 4     Map<String, BaseService> map = new HashMap<>();
 5 
 6     // 任務的委派,分發
 7     private BaseService delegate(String msg) {
 8         map.put("前端", new FrontService());
 9         map.put("后台", new CodeService());
10         if ("后台".equals(msg)) {
11             return map.get(msg);
12         } else if ("前端".equals(msg)) {
13             return map.get(msg);
14         }
15         System.out.println("委派任務出錯!");
16         return null;
17     }
18 
19     // 任務具體的執行
20     public void execute(String msg) {
21         if (delegate(msg)!=null) {
22             delegate(msg).execute();
23         }
24     }
25 
26 }

4.客戶端類

 1 //客戶端 ->委派任務
 2 public class Client {
 3 
 4     public static void main(String[] args) {
 5 
 6         String command1 = "前端";
 7         String command2 = "后台";
 8         Delegator delegator = new Delegator();
 9         delegator.execute(command1);
10         delegator.execute(command2);
11         delegator.execute("test");
12 
13     }
14 
15 }

效果截圖:

優缺點:

優點:通過任務委派能夠將一個大型的任務細化,然后通過統一管理這些子任務的完成情況實現任務的跟進,能夠加快任務執行的效率。

缺點:任務委派方式需要根據任務的復雜程度進行不同的改變,在任務比較復雜的情況下可能需要進行多重委派,容易造成紊亂。

適用場景:

1. spring mvc中核心控制器DispatcherServlet的執行流程。

2.需要對一個比較復雜的任務進行分解,分發執行並通過一個委派者角色將最終結果返回。

 

 

 

 

 

 

 

 

 

 

 

 

文章待完善。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM