【设计模式系列3】详解委派模式

69 阅读2分钟

| 三大工厂模式 | 登机入口 |

| 策略模式 | 登机入口 |

| 委派模式 | 登机入口 |

| 模板方法模式 | 登机入口 |

| 观察者模式 | 登机入口 |

| 单例模式 | 登机入口 |

| 原型模式 | 登机入口 |

| 代理模式 | 登机入口 |

| 装饰者模式 | 登机入口 |

| 适配器模式 | 登机入口 |

| 建造者模式 | 登机入口 |

| 责任链模式 | 登机入口 |

| 享元模式 | 登机入口 |

| 组合模式 | 登机入口 |

| 门面模式 | 登机入口 |

| 桥接模式 | 登机入口 |

| 中介者模式 | 登机入口 |

| 迭代器模式 | 登机入口 |

| 状态模式 | 登机入口 |

| 解释器模式 | 登机入口 |

| 备忘录模式 | 登机入口 |

| 命令模式 | 登机入口 |

| 访问者模式 | 登机入口 |

| 软件设计7大原则和设计模式总结 | 登机入口 |

什么是委派模式

====================================================================

委派模式(Delegate Pattern)不属于GOF23种设计模式内,委派模式的基本作用就是负责任务的调用和分配任务。委派模式在 Spring 中应用非常多,比如我们常用的 DispatcherServlet 其实就是用到了委派模式。现实生活中也常有委派的场景发生,比如老板给项目经理下达任务,然后项目经理拆分任务后分配给不同员工去实现不同的工作。

委派模式示例

===================================================================

下面就以老板给项目经理下达任务,项目经理拆分任务后分给各个开发人员为例来示范一下委派模式:

1、建立一个员工的接口类,定义一个工作方法,一个参数用来接收命令:

package com.zwx.design.pattern.delegate;

public interface IEmployee {

void work(String taskCommand);//工作方法

}

2、建立两个员工实现类来负责具体的工作

package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;

public class EmployeeA implements IEmployee {

@Override

public void work(String taskCommand) {

System.out.println("我是员工A,我正在工作:" + taskCommand);

}

}

package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;

public class EmployeeB implements IEmployee {

@Override

public void work(String taskCommand) {

System.out.println("我是员工B,我正在工作:" + taskCommand);

}

}

3、接下来再建立一个经理类,经理类的角色属于分发任务的重要角色,需要清楚给不同员工下达不同的命令

package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;

import java.util.HashMap;

import java.util.Map;

public class Manager implements IEmployee {

private Map<String,IEmployee> workTargetMap = new HashMap<>();

public Manager() {

workTargetMap.put("部署项目",new EmployeeA());

workTargetMap.put("修复BUG",new EmployeeB());

}

@Override

public void work(String taskCommand) {

IEmployee employee = workTargetMap.get(taskCommand);

if(null == employee){

System.out.println("未找到可以执行任务的员工");

return;

}

employee.work(taskCommand);

}

}

4、再创建一个老板(Boss)类,用来给经理下达工作命令

package com.zwx.design.pattern.delegate;

import com.zwx.design.pattern.delegate.impl.Manager;

public class Boss {

public void startWork(String taskCommand,Manager manager){

manager.work(taskCommand);

}

}

5、最后让我们写一个测试类来测试一下

package com.zwx.design.pattern.delegate;

import com.zwx.design.pattern.delegate.impl.Manager;

public class TestDelegatePattern {

public static void main(String[] args) {

new Boss().startWork("部署项目",new Manager());

}

}