委派模式
委派模式的基本作用就是负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,委派模式注重结果。不属于GOP23种模式之一,属于行为模式。
在我们工作中,最常见的一种情况就是,当我们公司老板想做一个东西,他要找到我们项目经理发送一个命令,然后我们项目经理接受到这个命令的时候,项目经理会根据这个东西来进行对团队里面的员工来分配。所以,我们项目经理Leader就是一种委派模式,他想我们老板的命令通过委派对员工去做。这就是一个任务的全权调度和任务分配。
talk is cheap show me the code
因为我们的员工有很多个,我们先声明一个员工的统一抽象接口,定义一个方法为doWork工作。
/**
* @description: 委派模式员工抽象接口
* @author: Jh Lee
* @create: 2019-03-15 23:13
**/
public interface Employee {
public void doWork();
}
然后我们分别创建不同技术特点的员工对象,分别都实现这个抽象员工的接口
员工A,擅长数据加密
/**
* @description: 员工A
* 擅长数据加密
* @author: Jh Lee
* @create: 2019-03-15 23:18
**/
public class EmployeeA implements Employee {
@Override
public void doWork() {
System.out.println("我是员工A,我擅长数据加密,我开始工作了!");
}
}
员工B,擅长编写SQL语句
/**
* @description: 员工B
* 擅长SQL语句
* @author: Jh Lee
* @create: 2019-03-15 23:18
**/
public class EmployeeB implements Employee {
@Override
public void doWork() {
System.out.println("我是员工B,我擅长编写SQL语句,我开始工作了!");
}
}
员工C,擅长JVM性能优化
/**
* @description: 员工C
* 擅长性能优化
* @author: Jh Lee
* @create: 2019-03-15 23:18
**/
public class EmployeeC implements Employee{
@Override
public void doWork() {
System.out.println("我是员工C,我擅长JVM性能优化,我开始工作了!");
}
}
接着我们新建一个项目经理Leader类,里面当然就有一个进行任务分发的方法。方法参数,就是我们老板具体想让我们项目经理做些什么,然后里面有一个容器,用于记录我们每一个员工的技术特点,方便我们通过我们老板的需求委派给不同的员工去工作。这里的容器我们还可以在数据库中进行存储,也可以直接声明在我们内存中。
/**
* @description: 委派模式项目经理
* @author: Jh Lee
* @create: 2019-03-15 23:12
**/
public class Leader {
//这里的项目经理预先知道了团队里面每个人的特长,特点,我们放在一个map容器里面,通过leader的构造方法存入,当然我们也可以通过数据库表来进行存放
private Map<String,Employee> register = new HashMap<>();
public Leader() {
register.put("数据加密",new EmployeeA());
register.put("SQL编写",new EmployeeB());
register.put("JVM性能优化",new EmployeeC());
}
//项目经理干活方法,通过对每一个员工的了解,让对应的员工去做对应是,通过命令委派给员工
public void doWork(String command){
this.register.get(command).doWork();
}
}
我们新建一个老板Boss类,里面有一个向项目经理Leader发送命令的方法。
/**
* @description: 委派模式Boss类
* @author: Jh Lee
* @create: 2019-03-15 23:12
**/
public class Boss {
//对项目经理发送命令,让项目经理干活
public void sendCommand(String command){
new Leader().doWork(command);
}
}
好,到这里我们整套委派的模式已经写完了,我们来测试一下。
/**
* @description: 委派模式测试类
* @author: Jh Lee
* @create: 2019-03-15 23:30
**/
public class DelegateTest {
public static void main(String[] args) {
//实例化一个老板
Boss boss = new Boss();
//让这个老板发送一条命令,老板想要对数据加密
boss.sendCommand("数据加密");
}
}
测试结果:
可以看到,我们相应的员工已经被委派到对老板的需求开始工作了,这就是委派模式。