一、模式介绍
委派模式负责任务的分配和调用,是一种特殊的静态代理模式,可以理解为全权代理模式,代理模式注重过程,委派模式注重结果。
在现实工作中,我们员工分为设计师、程序员、运维人员等等,大家负责不同种类的工作,对于公司领导来说,想要弄清楚所有人的工作种类和下达具体的工作任务是非常繁琐的,这将会导致领导和员工的强耦合,因此,我们需要将所有员工划分为不同的团队,每个团队设置一个项目经理,由项目经理来替领导管理员工和指派具体工作。
public interface IEmployee {
void doTask(String task);
}
@Slf4j
public class Designer implements IEmployee{
@Override
public void doTask(String task) {
log.info("执行{}任务", task);
}
}
@Slf4j
public class Coder implements IEmployee{
@Override
public void doTask(String task) {
log.info("执行{}任务", task);
}
}
@Slf4j
public class Manager implements IEmployee{
private Map<String,IEmployee> employeeMap = new HashMap<>();
/**
* 项目经理管理每个员工的工作类别
*/
public Manager() {
employeeMap.put("design", new Designer());
employeeMap.put("code", new Coder());
}
@Override
public void doTask(String task) {
if(!employeeMap.containsKey(task)){
log.error("无法完成该类型任务!");
return;
}
employeeMap.get(task).doTask(task);
}
}
public class Main {
public static void main(String[] args) {
Manager jack = new Manager();
jack.doTask("design");
jack.doTask("code");
}
}
二、使用案例
可以看到,委派模式比较简单,和静态代理模式极其相似,在框架中也多有使用场景:
- JDK类加载的双亲委派模型;
三、模式总结
3.1 优点
- 可以将大型任务拆解细化,然后方便管理子任务的情况,提升效率;
3.2 缺点
- 如果任务特别复杂,可能会涉及多种委派,代码可读性降低;
网友评论