導讀:
委派模式不屬於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.需要對一個比較復雜的任務進行分解,分發執行並通過一個委派者角色將最終結果返回。
文章待完善。