定义一个抽象接口,它有若干实现类,他们真正执行业务方法,这些子类是具体任务角色,定义委派者角色也实现该接口,但它负责在各个具体角色实例间做出决定,由它判断调用具体实现的方法。
委派模式对外隐藏了具体实现,仅将为拍着角色暴露给外部,如Spring的DispatchServlet,有点是对内隐藏实现,易于扩展,简化调用,在Spring,MyBatis等开源框架中,均有运用。
有点像 老板给经理下达任务,将任务全权交给项目经理,由经理根据一定的策略将任务分配给小组成员,项目经理从头跟到尾,老板不需要和小组成员直接联系,甚至可以不知道他们的存在,委派模式注重的是内部的灵活和复用
定义抽象任务接口
/**
* 抽象任务角色
*/
public interface Task {
void doTask();
}
具体的任务角色,实现上面的接口
/**
* 具体实现类A
*/
public class ConcreteTaskA implements Task {
public void doTask() {
System.out.println("执行 , 由A实现");
}
}
/**
* 具体实现类B
*/
public class ConcreteTaskB implements Task {
public void doTask() {
System.out.println("执行 , 由B实现");
}
}
委派角色,知道具体策略如何找到 相应的人去干活
import java.util.Random;
/**
* 代理角色
*/
public class TaskDelegate implements Task{
public void doTask() {
System.out.println("代理执行开始....");
Task task = null;
if (new Random().nextBoolean()){
task = new ConcreteTaskA();
task.doTask();
}else{
task = new ConcreteTaskB();
task.doTask();
}
System.out.println("代理执行完毕....");
}
}
测试
public class TaskTest {
public static void main(String[] args) {
new TaskDelegate().doTask();
}
}