一、委派模式定义

1.委派模式又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配任务,是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果。委派模式属于行为型模式,不属于GOF23种设计模式中。

二、委派模式示例

1.委派模式有三个角色:

  A.抽象任务角色(Task):定义一个抽象接口,它有若干实现类

  B.委派者角色(Delegate):负责在各个具体角色实例之间做出决策,并判断调用具体实现的方法

  C.具体任务角色(Concrete):真正执行任务的角色

2.代码示例

 1 public interface IEmployee {
 2     void doing(String task);
 3 }
 4 
 5 public class EmployeeA implements IEmployee {
 6 
 7     protected String goodAt = "编程";
 8 
 9     @Override
10     public void doing(String task) {
11         System.out.println("我是员工A,我擅长" + goodAt + ",现在开始做" + task + "工作");
12     }
13 }
14 
15 public class EmployeeB implements IEmployee {
16 
17     protected String goodAt = "平面设计";
18 
19     @Override
20     public void doing(String task) {
21         System.out.println("我是员工B,我擅长" + goodAt + ",现在开始做" + task + "工作");
22     }
23 }
24 
25 public class Leader implements IEmployee {
26 
27     private Map<String, IEmployee> employee = new HashMap<String, IEmployee>();
28 
29     public Leader(){
30         employee.put("爬虫", new EmployeeA());
31         employee.put("海报图", new EmployeeB());
32     }
33 
34     @Override
35     public void doing(String task) {
36         if(!employee.containsKey(task)){
37             System.out.println("这个任务" + task + "超出我的能力范围");
38             return;
39         }
40         employee.get(task).doing(task);
41     }
42 }
43 
44 public class Boss {
45     public void command(String task, Leader leader){
46         leader.doing(task);
47     }
48 }
49 
50 public class DelegateTest {
51     public static void main(String[] args) {
52         new Boss().command("爬虫", new Leader());
53     }
54 }

2.委派模式的优缺点

  A.优点

    通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率

  B.缺点

    任务委派方需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱