一、委派模式定义
? ? ? ? 委派模式其实不属于 GoF 23 种设计模式,委派模式的基本作用就是负责任务的调度和分配,跟代理模式很像,可以看做是一种特殊情况下的静态全权代理,但是代理模式注重过程,委派模式注重结果。
? ? ? ? 举例说明,在 Spring 中的 DispatcherServlet 中就用到了委派模式。在日常生活中,例如老板(Boss)给项目经理(Leader)分配工作,项目经理会根据实际情况给每个员工分配任务,待任务完成后再向老板汇报,下面用代码说明一下。
/**
* 员工接口
*/
public interface IEmployee {
public void doing(String command);
}
/**
* EmployeeA
*/
public class EmployeeA implements IEmployee {
@Override
public void doing(String command) {
System.out.println("EmployeeA doing " + command + " work");
}
}
/**
* EmployeeB
*/
public class EmployeeB implements IEmployee {
@Override
public void doing(String command) {
System.out.println("EmployeeB doing " + command + " work");
}
}
/**
* 项目经理
*/
public class Leader implements IEmployee {
private Map<String,IEmployee> map = new HashMap<>();
public Leader() {
map.put("工作a",new EmployeeA());
map.put("工作b",new EmployeeB());
}
@Override
public void doing(String command) {
map.get(command).doing(command);
}
}
/**
* 老板
*/
public class Boss {
public void command(String command,Leader leader){
leader.doing(command);
}
//测试代码
public static void main(String[] args) {
new Boss().command("工作a",new Leader());
}
}
?????????在 Spring 中 以 Delegate 结尾的地方都实现了委派模式
???????? 例如 :BeanDefinitionParserDelegate 中的 pase 方法。
|