设计模式——委派模式

委派模式

委派模式又叫委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。他的基本作用就是负责任务的调用和分配任务,是一种特殊的静态代理,可以理解为全权代理,但是代理模式注重过程,而委派模式注重结果。

委派模式在生活中的应用像是公司架构中,Boss给Leader下达任务,Leader根据下属员工的能力给员工派发任务,工作完成后再由Leader想Boss进行工作汇报。

Leader必须事先知道自己的手下员工能做什么,事先将各个员工对号入座,便于后边分配任务的时候快速找到目标完成任务。

public class Leader {
    private static Map<String,Employee> map = new HashMap<>();
    static{
        map.put("write_document",new EmployeeA());
        map.put("programming",new EmployeeB());
    }
    public String doDispatch(String command) {
        return map.get(command).process(command);
    }
}

员工只要做好自己的事情即可:

public interface Employee {
    String process(String command);
}

public class EmployeeA implements Employee {
    @Override
    public String process(String command) {
        return command + "已完成";
    }
}

public class EmployeeB implements Employee {
    @Override
    public String process(String command) {
        return command + "已完成";
    }
}

Boss只需要发送命令即可:

public class Boss {
    public String sendCommand(String command){
        return new Leader().doDispatch(command);
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        String rst = new Boss().sendCommand("programming");
        System.out.println(rst);
        rst = new Boss().sendCommand("write_document");
        System.out.println(rst);
    }
}
programming已完成
write_document已完成

特别关注的是Leader必须要将未来可能要调用来完成任务的对象先缓存起来。


委派模式最为人熟知的就是SpringMVC中的DispatcherServlet,他的原理也是事先(项目启动的时候)将请求的路径和请求的controller及其请求的方法一一对应并保存起来,当前端发来请求,通过请求路径找到方法并实现调用。这只是一个简化的委派模式,真正在使用的时候会灵活运用各种容器、内部类等来实现缓存。

一般在Spring源码中看到Delegate结尾的方法都可以研究下,基本都是使用了委派模式。


总结

委派模式的优缺点:

通过任务委派讲一个大型的任务细化,然后通过统一管理子任务的完成情况,能够加快任务的执行效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值