设计模式之委派模式

定义

委派模式又叫委托模式。它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来。可以看作一种特殊情况下的静态代理的全权代理

不属于GOF 23种设计模式之一

属于行为型模式

应用场景

委派对象本身不知道如何处理一个任务(或一个请求),把请求交给其它对象来处理

场景举例

/**
* 有这么一个场景 老板需要做一件事情,那么就会委派给leader,然后leader将任务分配给合适的员工
* 1. 需要有一个leader类,对员工的每项技能都比较熟悉,能够根据任务的不同下达给对应的员工
* 2. 需要有一个老板类,把任务委派给leader
* 3. 员工类的具体实现
*/

第一步 创建leader类 及任务接口

public class Leader implements IEmployee{

    private Map<String, IEmployee> employee = new HashMap<String, IEmployee>();

    public Leader(){
        employee.put("爬虫",new EmployeeA());
        employee.put("海报图",new EmployeeB());
    }

    @Override
    public void doing(String task) {
        if (!employee.containsKey(task)){
            System.out.println("这个" + task + "超出了我的能力范围");
            return;
        }
        employee.get(task).doing(task);
    }
}
public interface IEmployee {

    void doing(String task);
}

第二步: 创建boss类,将任务委派给leader

public class Boss {

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

}

第三步: 不同的员工去做具体的事情,员工A类 员工B类

public class EmployeeA implements IEmployee{
    protected String goodAt = "编程";

    @Override
    public void doing(String task) {
        System.out.println("我是员工A,我擅长" + goodAt + "我现在开始做" + task + "工作");
    }
}
public class EmployeeB implements IEmployee{
    protected String goodAt = "平面设计";

    @Override
    public void doing(String task) {
        System.out.println("我是员工B,我擅长" + goodAt + "我现在开始做" + task + "工作");
    }
}

分析:委派模式的思想其实很简单,就是找到一个委托人,把具体的任务分派下去,然后具体的实现步骤交由委派人leader,然后具体的实现细节去实现leader的任务。

优缺点

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

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

委派模式和代理模式的区别

1.委派模式是行为型模式,代理模式是结构型模式

2.委派模式注重的是任务派遣,注重结果;代理模式注重的是代码增强,注重过程

3.委派模式是一种特殊的静态模式,相当于全权代理

相关推荐

  1. 设计模式委派模式

    2024-03-22 22:10:02       46 阅读
  2. 设计模式&委派模式(Delegate Pattern)

    2024-03-22 22:10:02       58 阅读
  3. 设计模式模板模式

    2024-03-22 22:10:02       21 阅读
  4. 【前端设计模式模版方法模式

    2024-03-22 22:10:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 22:10:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 22:10:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 22:10:02       87 阅读
  4. Python语言-面向对象

    2024-03-22 22:10:02       96 阅读

热门阅读

  1. 题解/算法 {5556. 牛的语言学}

    2024-03-22 22:10:02       33 阅读
  2. 优先队列笔记

    2024-03-22 22:10:02       42 阅读
  3. 数据科学详解与人工智能关系

    2024-03-22 22:10:02       44 阅读
  4. 前端逻辑错误或UI崩溃解决问题

    2024-03-22 22:10:02       38 阅读
  5. SQL Server创建存储过程

    2024-03-22 22:10:02       45 阅读
  6. 力扣-283. 移动零

    2024-03-22 22:10:02       47 阅读
  7. 基于STM32的寻迹小车设计详细论文

    2024-03-22 22:10:02       34 阅读
  8. Thingworx高可用集群部署(七)-Zookeeper集群部署

    2024-03-22 22:10:02       42 阅读
  9. Redis切换数据库的详细介绍

    2024-03-22 22:10:02       45 阅读
  10. 洛克王国卡小游戏2

    2024-03-22 22:10:02       39 阅读
  11. Yarn 管理的前端项目转换为使用 npm

    2024-03-22 22:10:02       41 阅读