【设计模式系列3】详解委派模式

设计模式系列总览

设计模式飞机票
三大工厂模式登机入口
策略模式登机入口
委派模式登机入口
模板方法模式登机入口
观察者模式登机入口
单例模式登机入口
原型模式登机入口
代理模式登机入口
装饰者模式登机入口
适配器模式登机入口
建造者模式登机入口
责任链模式登机入口
享元模式登机入口
组合模式登机入口
门面模式登机入口
桥接模式登机入口
中介者模式登机入口
迭代器模式登机入口
状态模式登机入口
解释器模式登机入口
备忘录模式登机入口
命令模式登机入口
访问者模式登机入口
软件设计7大原则和设计模式总结登机入口

什么是委派模式

委派模式(Delegate Pattern)不属于GOF23种设计模式内,委派模式的基本作用就是负责任务的调用和分配任务。委派模式在 Spring 中应用非常多,比如我们常用的 DispatcherServlet 其实就是用到了委派模式。现实生活中也常有委派的场景发生,比如老板给项目经理下达任务,然后项目经理拆分任务后分配给不同员工去实现不同的工作。

委派模式示例

下面就以老板给项目经理下达任务,项目经理拆分任务后分给各个开发人员为例来示范一下委派模式:
1、建立一个员工的接口类,定义一个工作方法,一个参数用来接收命令:

package com.zwx.design.pattern.delegate;

public interface IEmployee {
    void work(String taskCommand);//工作方法
}

2、建立两个员工实现类来负责具体的工作

package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;

public class EmployeeA implements IEmployee {
    @Override
    public void work(String taskCommand) {
        System.out.println("我是员工A,我正在工作:" + taskCommand);
    }
}
package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;
public class EmployeeB implements IEmployee {
    @Override
    public void work(String taskCommand) {
        System.out.println("我是员工B,我正在工作:" + taskCommand);
    }
}

3、接下来再建立一个经理类,经理类的角色属于分发任务的重要角色,需要清楚给不同员工下达不同的命令

package com.zwx.design.pattern.delegate.impl;

import com.zwx.design.pattern.delegate.IEmployee;
import java.util.HashMap;
import java.util.Map;

public class Manager implements IEmployee {
    private Map<String,IEmployee> workTargetMap = new HashMap<>();

    public Manager() {
        workTargetMap.put("部署项目",new EmployeeA());
        workTargetMap.put("修复BUG",new EmployeeB());
    }

    @Override
    public void work(String taskCommand) {
        IEmployee employee = workTargetMap.get(taskCommand);
        if(null == employee){
            System.out.println("未找到可以执行任务的员工");
            return;
        }
        employee.work(taskCommand);
    }
}

4、再创建一个老板(Boss)类,用来给经理下达工作命令

package com.zwx.design.pattern.delegate;

import com.zwx.design.pattern.delegate.impl.Manager;

public class Boss {
    public void startWork(String taskCommand,Manager manager){
        manager.work(taskCommand);
    }
}

5、最后让我们写一个测试类来测试一下

package com.zwx.design.pattern.delegate;

import com.zwx.design.pattern.delegate.impl.Manager;

public class TestDelegatePattern {

    public static void main(String[] args) {
        new Boss().startWork("部署项目",new Manager());
    }
}

委派模式示例类图展示

员工和经理都继承自员工,而经理又持有了普通员工的引用,Boss负责下命令,Manager负责分发调度任务
在这里插入图片描述

委派模式和其他模式的区别

1、 与代理模式区别:代理模式注重的是代理的过程,比如我们需要在代理的过程中做一些事情,就适合用代理,而委派模式注重的是结果
2、与策略模式区别:策略模式更注重的是外部扩展,不同策略相互之间可以替代,而委派模式注重内部的灵活和复用

总结

1、委派者要持有被委派者的引用,委派者需要知道每一个被委派者能做什么
2、委派模式的核心:就是分发、调度、派遣任务
3、委培模式可以看做是静态代理和策略模式的一种特殊的组合

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双子孤狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值