委派模式(DelegatePattern)的基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式在Spring中应用非常多,大家常用的DispatcherServlet其实就是用到了委派模式。委派模式不属于23种设计模式,在平常其他设计模式中可能也有体现。
生活中很常见的例子,老板将任务派发给部门经理,经理拿到任务后再派发给具体的员工执行任务。
public interface IEmployee { public void work(String command) ; }
public class EmployeeA implements IEmployee { @Override public void work(String command) { System.out.println("员工A,开始 " + command + " 工作"); } }
public class EmployeeB implements IEmployee { @Override public void work(String command) { System.out.println("员工B,开始 " + command + " 工作"); } }
public class Leader implements IEmployee { private Map<String, IEmployee> map = new HashMap<String, IEmployee>(); public Leader() { map.put("加密", new EmployeeA()); map.put("登录", new EmployeeB()); } @Override public void work(String command) { // 根据不同的指令,将任务派发到不同的下属 IEmployee iEmployee = map.get(command); if(iEmployee != null) { iEmployee.work(command); } else { System.out.println("没有能干活的下属了,只能leader自己做事了 ," + command); } } }
public class Boss { public void command(String command, Leader leader) { leader.work(command); } }
public class DelegateTest { public static void main(String[] args) { // 客户请求(Boss)、委派者(Leader)、被被委派者(Target) // 委派者要持有被委派者的引用 // 代理模式注重的是过程, 委派模式注重的是结果 // 策略模式注重是可扩展(外部扩展),委派模式注重内部的灵活和复用 // 委派的核心:就是分发、调度、派遣 // 委派模式:就是静态代理和策略模式一种特殊的组合 new Boss().command("登录", new Leader()); new Boss().command("加密", new Leader()); new Boss().command("开发", new Leader()); } }
员工B,开始 登录 工作
员工A,开始 加密 工作
没有能干活的下属了,只能leader自己做事了 ,开发