委派模式

在常用的23种设计模式中其实面没有委派模式(delegate)的影子,但是在Spring中委派模式确实用的比较多的一种模式。在spring中的体现:Spring MVC框架中的DispatcherServlet其实就用到了委派模式。

委派模式的作用: 基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果

如何理解委派模式

在这里插入图片描述

在上图中,项目经理将一个任务分发给具体的执行者去执行(委派),但是BOSS是不关注这个过程,BOSS只关心在规定时间内项目经理能否完成,所以委派模式注重的是结果而不是过程。

委派模式Demo

定义任务执行的接口:

public interface Executer {
    void execute(String command);
}

执行者A:

public class ExecuterA implements Executer {
    @Override
    public void execute(String command) {
        System.out.println("执行者A执行:"+command);
    }
}

执行者B:

public class ExecuterB implements Executer {
    @Override
    public void execute(String command) {
        System.out.println("执行者B执行:"+command);
    }
}

模拟项目经理分配任务:

public class Leader implements Executer {
    private Map<String, Executer> targets = new HashMap<>();
    public Leader() {
        targets.put("修改密码",new ExecuterA());
        targets.put("登录",new ExecuterB());
    }
    @Override
    public void execute(String command) {
        targets.get(command).execute(command);
    }
}

模拟BOSS给项目经理下达任务:

public class Boss {
    public static void main(String[] args) {
        Leader leader = new Leader();
        //BOSS为项目经理布置任务(Leader),然而项目经理不会具体去执行,而是将任务分配给执行者。
        // 这就是典型的“干活是你的,功劳是我的(站在Leader的角度)”
        leader.execute("登录");
        leader.execute("修改密码");
    }
}

总结

委派模式最关键的就是委派类的编写,也就是上面的Leader类。委派类负责任务的调用和分配任务。

posted @ 2019-07-14 12:00  听到微笑  阅读(1)  评论(0编辑  收藏  举报  来源