1.定义
委派模式又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用,它的作用就是负责任务的调用和分配。是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果,委派模式属于行为型模式,不属于GOF23种设计模式。
2.三种角色
- 抽象任务角色(Task):定义一个抽象接口,它有若干实现类。
- 委派者角色(Delegate):负责在各个具体的角色实例之间做出决策,并判断调用具体的实现方法。
- 具体的任务角色(Concrete):真正执行任务的角色
3.demo
每个员工有自己的岗位,每个岗位做对应的事情,然后老板让部门领导分配任务下去了
/**
* create by yufeng on 2021/7/5 14:12
*/
public interface IEmployee {
void coding(String task);
}
/**
* create by yufeng on 2021/7/5 14:13
*/
public class EmployeeA implements IEmployee {
private String goodAt = "写java bug";
public void coding(String task) {
System.out.println("我是员工A 我擅长" + goodAt + "我现在在做" + task + "任务");
}
}
/**
* create by yufeng on 2021/7/5 14:13
*/
public class EmployeeB implements IEmployee {
private String goodAt = "写C++ bug";
public void coding(String task) {
System.out.println("我是员工B 我擅长" + goodAt + "我现在在做" + task + "任务");
}
}
/**
* create by yufeng on 2021/7/5 14:13
*/
public class EmployeeC implements IEmployee {
private String goodAt = "写web bug";
public void coding(String task) {
System.out.println("我是员工C 我擅长" + goodAt + "我现在在做" + task + "任务");
}
}
/**
* create by yufeng on 2021/7/5 14:15
*/
public class LeaderDelegate implements IEmployee{
Map<String, IEmployee> map = new HashMap<String, IEmployee>();
public LeaderDelegate() {
map.put("java", new EmployeeA());
map.put("C++", new EmployeeB());
map.put("web", new EmployeeC());
}
public void coding(String task) {
if (!map.containsKey(task)) {
System.out.println("这个任务" + task + "超出了我的能力范围");
return;
}
map.get(task).coding(task);
}
}
/**
* create by yufeng on 2021/7/5 14:40
*/
public class Boss {
public void commad(String task, LeaderDelegate leader) {
leader.coding(task);
}
}
/**
* create by yufeng on 2021/7/5 14:43
*/
public class Test {
public static void main(String[] args) {
Boss boss = new Boss();
boss.commad("java", new LeaderDelegate());
boss.commad("C++", new LeaderDelegate());
boss.commad("web", new LeaderDelegate());
boss.commad("c", new LeaderDelegate());
}
}
执行结果:
我是员工A 我擅长写java bug我现在在做java任务
我是员工B 我擅长写C++ bug我现在在做C++任务
我是员工C 我擅长写web bug我现在在做web任务
这个任务c超出了我的能力范围
4.委派模式在源码中的应用
类加载机制的双亲委派模型
5.优缺点
优点:通过委派任务可以将一个大的任务进行细化,然后通过统一对这些子任务进行管理,加快任务的执行效率
缺点:任务委派方式需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能进行多重委派,容易造成紊乱