委派模式

委派模式

定义

委派模式,是一种面向对象的设计模式,是一种特殊的静态代理,可以理解为全权代理,代理模式注重的是对原始被代理的增强,委派注重的是交给委派对象拿到委派之后的结果。委派属于行为型设计模式。

 

委派的角色

  • 抽象任务角色(Task)定义一个抽象解耦他有若干实现类

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

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

//具体任务类抽象
public interface IEmployee {
   void doing(String task);
}
//具体任务类A
public class EmployeeA implements IEmployee{
   private String role = "程序员";
   @Override
   public void doing(String task) {
       System.out.println("开始编程");
  }
}
//具体任务类B
public class EmployeeB implements IEmployee{
   private String role = "设计师";
   @Override
   public void doing(String task) {
       System.out.println("开始画稿");
  }
}
//委派角色 负载分发任务 和 执行
public class Leader implements IEmployee{
   private Map<String, IEmployee> employeeMap = new HashMap<>();
   public Leader(){
       employeeMap.put("coding", new EmployeeA());
       employeeMap.put("design", new EmployeeB());
  }

//这里使用策略模式,拿到具体的一个方案,然后执行
   @Override
   public void doing(String task) {
       if(!employeeMap.containsKey(task)) {
           System.out.println(task + ",sorry能力有限另寻高明");
      }else{
           employeeMap.get(task).doing(task);
      }
  }
}
//调用者持有委派角色,直接从委派角色拿到结果,对执行过程完全透明
public class Boss {

   public void command(String task, Leader leader){
       leader.doing(task);
  }

   public static void main(String[] args) {
       Boss boss = new Boss();
       Leader leader = new Leader();
       boss.command("coding", leader);
  }
}

委派模式优缺点:

优点:将大的任务通过任务职责细分到不同的委派角色 每个委派角色负责执行各个子任务,边界更明确

缺点: 代码实现更复杂,类的关系也更复杂,任务复杂的情况下可能出现多重委派,导致代码结构紊乱

 

posted @ 2021-07-06 11:05  醉梦了红尘  阅读(289)  评论(0)    收藏  举报