1 Star 0 Fork 1

wow / java-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
委派模式.md 2.52 KB
一键复制 编辑 原始数据 按行查看 历史
wow 提交于 2020-09-01 19:25 . 设计模式

概念

委派模式不属于GOF23种设计模式,委派模式的基本作用就是负责任务的调用和分配,这可以看做是一种特殊情况想下的静态代理。委派模式对外隐藏了具体实现,仅将委派者暴露给外部,委派者负责挑选执行者,并将任务交给它,进行执行。

Spring中的DispatcherServlet中就用到了,委派模式,DispatcherServlet 会根据 http 请求中的方法类型、url参数等,挑选出 controller 进行执行,随后将结果返回。

在现实生活中也经常有委派模式的场景发生,如 老板将任务派发给项目经理,项目经理在根据实际情况给每个员工派发任务,待员工完成任务后,再由项目经理汇报工作进度给老板。

实现

员工接口

public interface IEmployee {
    void doing(String command);
}

员工A

public class EmployeeA implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是员工 A, 我现在开始干" + command + "工作");
    }
}

员工B

public class EmployeeB implements IEmployee {
    @Override
    public void doing(String command) {
        System.out.println("我是员工 B, 我现在开始干" + command + "工作");
    }
}

经理

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

    public Leader() {
        targets.put("加密", new EmployeeA());
        targets.put("登录", new EmployeeB());
    }

    //项目经理自己不干活
    @Override
    public void doing(String command) {
        targets.get(command).doing(command);
    }
}

老板

public class Boss {

    public void command(String command,Leader leader){
        leader.doing(command);
    }
}

调用

public static void main(String[] args) {
    //客户请求( Boss) 、 委派者( Leader) 、 被被委派者( Target)
    //委派者要持有被委派者的引用
    //代理模式注重的是过程, 委派模式注重的是结果
    //策略模式注重是可扩展( 外部扩展) , 委派模式注重内部的灵活和复用
    //委派的核心: 就是分发、 调度、 派遣
    //委派模式: 就是静态代理和策略模式一种特殊的组合
    new Boss().command("登录", new Leader());
}

我们可以看到,老板派发的任务,经过经理发到了具体的人的手中并执行。

其他
1
https://gitee.com/superwow/java-notes.git
git@gitee.com:superwow/java-notes.git
superwow
java-notes
java-notes
master

搜索帮助