【Java设计模式】行为型设计模式-委派模式(十七)

委派模式

  • 委派模式是将具体由调用者去实现的功能将其委托交付给一个或多个中间者进行处理,处理完成后又回复给调用者的模式。

进一步阐述:

  • 我们可以理解成上级分配任务到具体的员工,比如说一个大老板手下有上千个员工,平常端茶递水的活肯定不是自己干。一般口渴了就会跟下面经理说:小张啊 我口渴了给我倒杯茶!
  • 然后张经理面带微笑着回答:好的老板,这就给您倒茶。然后张经理跟下面的员工说:小刘啊,去倒杯茶过来快点哟!
  • 一会小刘把茶端过来递给张经理,张经理屁颠屁颠地把茶送到老板面前说:您要的茶来了,有点热您注意别烫着啊。
  • 这整个流程就是委派模式,老板将倒茶任务委派给张经理,张经理再将倒茶任务委派给小刘。

委派模式包含三种角色:

  • AbstractTask (抽象任务角色):是一个抽象类或者接口,含有需要处理的数据逻辑的方法,表示一个需要被执行的任务。
  • Delegater(委派者):实现或者继承了抽象任务角色,持有一个抽象任务角色(即被委派者)的引用并提供一个方法将任务委派给具体任务角色。
  • ConcreteTask(具体任务角色):实现或者继承了抽象任务角色,也是被委派者,负责具体去执行分派的任务的逻辑。

案例:上级分配经理去倒水,经理再委派给普通员工去倒水为例。其中员工Employee接口就是抽象任务角色,经理Manager类就是委派者,普通员工OrdinaryEmployee类就是具体任务角色。

UML类图:

客户端Client类:

java 复制代码
/**
 * 使用委派模式的客户端
 */
public class Client {
​
    public static void main(String[] args) {
        Boss boss = new Boss();
        boss.handOverSomething();
    }
}

老板Boss类:

java 复制代码
/**
 * 老板类
 */
public class Boss {
​
    /**
     * 交代经理去做某事
     */
    public void handOverSomething() {
        Manager mng = new Manager(new OrdinaryEmployee());
        mng.doSomething();
    }
}

员工Employee接口:

java 复制代码
/**
 * 员工接口(抽象任务角色)
 */
public interface Employee {
​
    /**
     * 做某事
     */
    void doSomething();
}

经理Manager类:

java 复制代码
/**
 * 经理类(委派者角色)
 */
public class Manager implements Employee {
​
    private Employee employee;
​
    public Manager(Employee employee) {
        this.employee = employee;
    }
​
    /**
     * 做某事
     */
    @Override
    public void doSomething() {
        employee.doSomething();
    }
}

普通员工OrdinaryEmployee类:

java 复制代码
/**
 * 普通员工类(具体任务角色也是被委派者)
 */
public class OrdinaryEmployee implements Employee {
​
    /**
     * 做倒茶水这件事
     */
    @Override
    public void doSomething() {
        System.out.println("您的茶来了,我刚倒的茶有点热您注意别烫着啊!");
    }
}

总结:

  • 委派的核心:就是对任务进行分发、调度、派遣。
  • 委派模式和代理模式的区别:代理模式注重的是过程,委派模式注重的是结果。
  • 委派模式和策略模式的区别:策略模式注重是可扩展性(外部扩展),委派模式注重内部的灵活和复用。
  • 将具体的任务和发布这个任务的调用者中间加上了一个缓冲的相当于中介者一样,使得逻辑的职能分工更加细化和明确,更好的遵守了单一职能原则。
  • 在中间的委派者角色中关联了具体的任务(即被委派者),这样就遵守合成复用原则。

典型运用场景举例: 电商的库存系统中当卖出一件商品或者是商品的数量经过商品管理服务进行修改后,不是直接去调用库存管理服务执行减库存的逻辑,而是委派给消息中间件去做,然后消息中间件又将减库存的任务委派给相关的库存服务执行。

相关推荐
GetcharZp16 小时前
拒绝低效!这款神器,让你的终端效率起飞 | 深度解析 fzf 终极指南
后端
chools16 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
CPUOS201016 小时前
嵌入式C语言高级编程之MVC设计模式
c语言·设计模式·mvc
李白你好17 小时前
TongWeb EJB 反序列化生成工具(Java-Chain 插件)
java·安全
自珍JAVA17 小时前
高效处理Long列表与集合运算:基于RoaringBitmap的工具类解析与应用场景
后端
小码哥_常17 小时前
Spring Boot项目上线秘籍:日志、监控、异常处理全攻略
后端
U盘失踪了18 小时前
Java 的 JAR 是什么?
java·jar
GreenTea18 小时前
AI 时代,工程师的不可替代性在哪里
前端·人工智能·后端
朦胧之18 小时前
AI 编程开发思维
前端·后端·ai编程
今天又在写代码18 小时前
java-v2
java·开发语言