一、委派模式应用场景
委派模式不属于GOF23种设计模式。
委派模式(Delegate pattern )的作用:负责任务的掉用和分配任务。
使用场景:Spring中的DispatcherServlet使用的就是委派模式。
生活例子:老板给经理下达命令叫员工干活,员工完成任务后由项目经理汇报结果给老板。
委派和代理的区别:委派模式可以看成是一种特殊的代理模式,静态代理的全权代理,代理注重的是过程,委派注重的结果
二、委派模式实现
组成部分: 客户请求,委派者,被委派者
客户请求----》创建一个boss类模拟客户请求
public class Boss {
public void command(String command, Leader leader) {
leader.doing(command);
}
}
委派者-----》创建一个经理类模拟委派者
public class Leader {
//员工登记
Map<String,IEmployee> targets = new HashMap<String, IEmployee>();
//添加被委派者的引用
public Leader(){
targets.put("外交",new EmployeeA());
targets.put("技术",new EmployeeB());
}
public void doing (String commed){
targets.get(commed).doing(commed);
}
}
被委派者----》员工类为被委派者
public interface IEmployee {
void doing(String commed);
}
public class EmployeeA implements IEmployee {
@Override
public void doing(String commed) {
System.out.println("我是员工A,我擅长外交,开始干"+commed+"活了");
}
}
public class EmployeeB implements IEmployee {
@Override
public void doing(String commed) {
System.out.println("我是员工B,我擅长技术,开始干"+commed+"活了");
}
}
三、委派模式在源码中的应用
在 Spring 源码中,只要以 Delegate 结尾的都是实现了委派模式。
例如:BeanDefinitionParserDelegate 根据不同类型委派不同的逻辑解析 BeanDefinition。