【设计模式系列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负责分发调度任务
【设计模式系列3】详解委派模式_第1张图片

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

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

总结

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

你可能感兴趣的:(设计模式,java,设计模式,编程语言)