1. 委派模式定义

委派模式(Delegate Pattern) 的基本作用就是负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。

不属于GOF 23种设计模式之一
属于行为模式

2. 案例 boss-leader-employee

Boss类

  1. public class Boss {
  2. public void command(String command, Leader leader){
  3. leader.doing(command);
  4. }
  5. }

boss类作为命令的发起者,不干活,交由手下的leader!

Leader类

  1. public class Leader {
  2. //预先知道每个员工的特长和特征 分发任务
  3. private Map<String,Employee> register = new HashMap<>();
  4. public Leader(){
  5. register.put("加密", new EmployeeA());
  6. register.put("架构", new EmployeeB());
  7. }
  8. public void doing(String command){
  9. register.get(command).doing(command);
  10. }
  11. }

leader作为二把手,熟悉每个员工的技能,在了解到老板发布的命令之后,交由指定员工干活!

Employee员工接口

  1. public interface Employee {
  2. public void doing(String command);
  3. }

通用员工接口,负责规范员工做事的约束!

EmployeeA 员工A

  1. public class EmployeeA implements Employee{
  2. @Override
  3. public void doing(String command) {
  4. System.out.println("我是员工A,我开始干活了,擅长加密,执行" + command);
  5. }
  6. }

员工A擅长加密工作!

EmployeeB 员工B

  1. public class EmployeeB implements Employee{
  2. @Override
  3. public void doing(String command) {
  4. System.out.println("我是员工B,我开始干活了,擅长架构,执行" + command);
  5. }
  6. }

员工A擅长架构工作!

DelegateTest委派测试

  1. public class DelegateTest {
  2. public static void main(String[] args) {
  3. new Boss().command("加密", new Leader());
  4. new Boss().command("架构", new Leader());
  5. }
  6. }

不同的工作,会被leader自动挑选给合适的员工去做!
image.png

3. SpringMVC对于委派模式的应用

类以Delegate结尾的一般都是委派,包含了Dispatcher
用户的请求通过servlet转化为java的逻辑
类似java中的

4. 委派模式的应用场景

委派模式作为代理,给用户提供唯一的访问入口,提升体验!