委派模式的定义及应用场景
委派模式(Delegate Pattern)不属于 GoF 23 种设计模式。委派模式的基本作用就是负责任务的调用和分配。委派模式在 Spring 中应用得非常多,大家常用的 DispatcherServlet 就用到了委派模式。
案例分析
现实生活中也常有委派的场景发生,例如老板(Boss)给项目经理(Leader)下达任务,项目经理会根据实际情况给每个员工派发任务,待员工把任务完成后,再由项目经理向老板汇报结果。我们用代码来模拟一下这个业务场景,先来看一下类图,如下图所示。
创建 IEmployee 员工接口:
package com.yjw.demo.pattern.delegate2;
public interface IEmployee {
public void doing(String command);
}
创建员工类 EmployeeA:
package com.yjw.demo.pattern.delegate2;
public class EmployeeA implements IEmployee {
@Override
public void doing(String command) {
System.out.println("我是员工A,我现在开始干" + command + "工作");
}
}
创建员工类 EmployeeB:
package com.yjw.demo.pattern.delegate2;
public class EmployeeB implements IEmployee {
@Override
public void doing(String command) {
System.out.println("我是员工B,我现在开始干" + command + "工作");
}
}
创建项目经理类 Leader:
package com.yjw.demo.pattern.delegate2;
import java.util.HashMap;
import java.util.Map;
public class Leader implements IEmployee {
private Map<String, IEmployee> targets = new HashMap<>();
public Leader() {
targets.put("加密", new EmployeeA());
targets.put("登录", new EmployeeA());
}
/**
* 项目经理自己不干活,委派任务给对应的员工工作
*
* @param command
*/
@Override
public void doing(String command) {
targets.get(command).doing(command);
}
}
创建 Boss 类下达命令:
package com.yjw.demo.pattern.delegate2;
public class Boss {
public void command(String command, Leader leader) {
leader.doing(command);
}
}
测试代码如下:
package com.yjw.demo.pattern.delegate2;
public class DelegateTest {
public static void main(String[] args) {
new Boss().command("登录", new Leader());
}
}
摘录:《Spring 5 核心原理与30个类手写实战》来自文艺界的Tom老师的书籍。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/dvi60g 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。