導讀 在spring中委派模式用的比較多,在常用的23種設計模式中其實是沒有委派模式的影子的。 在spring中體現:Spring MVC框架中的DispatcherServlet其實就用到了委派模式。 委派模式的作用:基本作用就是負責任務的調用和分配,跟代理模式很像,可以看做是一種特殊情況下的靜態 ...
導讀
在spring中委派模式用的比較多,在常用的23種設計模式中其實是沒有委派模式的影子的。
在spring中體現:Spring MVC框架中的DispatcherServlet其實就用到了委派模式。
委派模式的作用:基本作用就是負責任務的調用和分配,跟代理模式很像,可以看做是一種特殊情況下的靜態代理的全權代理,但是代理模式註重過程,而委派模式註重結果。
Example
利用一張圖簡述委派模式,下圖簡單說明瞭老闆把任務給了項目經理,而項目經理將任務拆分,分給一個個it攻城獅,自己沒有做工作,而是把具體工作交給具體的執行者去做。
代碼示例
介面:IExcuter.java
public interface IExcuter { void excute(String command); }
攻城獅A:ExcuterA.java
public class ExcuterA implements IExcuter{ @Override public void excute(String command) { System.out.println("員工A 開始做"+command+"的工作"); } }
攻城獅B:ExcuterB.java
public class ExcuterB implements IExcuter{ @Override public void excute(String command) { System.out.println("員工B 開始做"+command+"的工作"); } }
項目經理(委派者):Leader.java
public class Leader implements IExcuter { private Map<String,IExcuter> targets = new HashMap<String,IExcuter>(); public Leader() { targets.put("加密",new ExcuterA()); targets.put("登錄",new ExcuterB()); } @Override public void excute(String command) { targets.get(command).excute(command); } }
老闆:Boss.java
public class Boss { public static void main(String[] args) { Leader leader = new Leader(); //看上去好像是我們的項目經理在幹活 //但實際幹活的人是普通員工 //這就是典型,幹活是我的,功勞是你的 leader.excute("登錄"); leader.excute("加密"); } }
實現
參考:https://www.jianshu.com/p/38acf37b1e1f