一、委派模式定义
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.缺点
任务委派方需要根据任务的复杂程度进行不同的改变,在任务比较复杂的情况下可能需要进行多重委派,容易造成紊乱