委派模式的基本作用是负责任务的调度和分配任务。
委派模式 在现实生活中也有相关的体现,比如一个具体任务的执行,首先是经过高层领导讨论,将具体的任务委派给相关部门经理,部门经理拿到任务通知后去委派相关的员工具体执行任务,委派任务的角色实际并非具体执行任务,而是对任务分发,执行过程进行管理。
委派模式能够将一个大型的任务细化,统一管理任务的完成情况,并实现任务的跟进,能够加快任务执行的效率。
委派模式 是一种行为型模式。 在Spring 中应用挺多的,但是不属于(GOF)23种设计模式。
代码示例:
public interface IEmploy {
void doTask(String taskName);
}
public class EmployA implements IEmploy {
public void doTask(String taskName) {
System.out.println("员工A在做任务" + taskName);
}
}
public class EmployB implements IEmploy {
public void doTask(String taskName) {
System.out.println("员工A在做任务" + taskName);
}
}
领导委派分发任务
public class Leader implements IEmploy {
private static Map<String, IEmploy> taskMap = new HashMap<String, IEmploy>();
static{
taskMap.put("编程", new EmployA());
taskMap.put("平面设计", new EmployB());
}
public void doTask(String taskName) {
if(taskMap.containsKey(taskName)){
taskMap.get(taskName).doTask(taskName);
}else{
System.out.println("当前任务不支持!");
}
}
}
老板发送指令,布置任务
public class Boss {
private IEmploy employ;
public Boss(IEmploy employ) {
this.employ = employ;
}
void sendCommand(String task){
employ.doTask(task);
}
}
public class Test {
public static void main(String[] args) {
Boss b = new Boss(new Leader());
b.sendCommand("平面设计");
}
}
优缺点:
1。对外隐藏调用,简化使用
2.业务扩展之后,派发命令的类也需要做调整,不符合开闭原则
委派模式和静态代理模式有什么区别?
委派模式注重的是结果,代理模式注重的是过程。一个是任务分发,一个是工程增强
应用实例:
1.jdk的双亲委派机制ClassLoader。源码中ClassLoader有一个loadClass方法,这个判断当前这个类加载器有没有父类加载器,如果用,递归调用父类的类加载器来加载,如果没有,自己去加载,这样可以防止内存中有多份相同的字节码。
2.Springmvc中的DispathcherServlet中diapatch()方法,进行任务的分发。