委派模式(Delegate Pattern)不属于 GoF 23种设计模式。基本作用就是负责任务的调用和分配,和代理模式很像,可以看做是一种特殊情况下的静态的全权代理,代理模式注重过程而委派模式注重结果。
在Spring MVC中的 dispatchServlet 当中就用到了委派模式。在现实生活中也存在着委派。当老板安排一个项目给项目经理时,项目经理会根据项目来拆分多个部分来进行下派任务。有的人做设计,有的人做前端,有的人做后端。不同员工做不同的事,最后项目完成又经理上报完成情况和总结。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RiDWQekI-1581073613391)(http://m.qpic.cn/psb?/V13wdS6C1sTdYl/cqXiHaxnQmBppZZmglAiTRo7CMwJ4NBYnVL3M9RDTAU!/b/dFQBAAAAAAAA&bo=OAFGAQAAAAADB1w!&rf=viewer_4)]
员工接口
public interface Employee {
/**
* 做事
*
* @param str
*/
void doing(String str);
}
UI设计师
public class UiEmployee implements Employee {
@Override
public void doing(String str) {
System.out.println( "我是UI设计师,正在做:"+str);
}
}
攻城狮
public class JavaEmployee implements Employee {
@Override
public void doing(String str) {
System.out.println("我是Java攻城狮,正在做:"+str);
}
}
经理
public class Leader implements Employee {
@Override
public void doing(String str) {
System.out.println("我是项目经理安排员工做事");
switch (str) {
case "UI":
new UiEmployee().doing(str);
break;
case "Java":
new JavaEmployee().doing(str);
break;
}
}
}
老板
public class Boss {
public void command(String task, Leader leader) {
leader.doing(task);
}
}
运行
public class Run {
public static void main(String[] args) {
Boss boss=new Boss();
boss.command("Java",new Leader());
boss.command("UI",new Leader());
}
}
结果
我是项目经理安排员工做事
我是Java攻城狮,正在做:Java
我是项目经理安排员工做事
我是UI设计师,正在做:UI