概述:

  委派模式有点像代理模式又有点像策略模式。 区别在于代理模式注重过程,委派模式注重结果。 生活中也有很多委派模式的例子:例如公司老板给项目经理下达任务,将任务全权交给项目经理,有项目经理根据一定的策略分配给小组成员,项目经理从跟到尾。项目经理就像是一个老板授权的中介,老板不需要跟小组成员直接联系,甚至可以不知道他们的存在。就像电视剧《楚汉传奇》里面韩信说的,他可以统领100万大军,只需要10个将军,他只负责管理调度这10个将军。不需要了解每个士兵的用途。

代码实现:

  我们干活的程序员实现公共的一个干活接口:

/**
* Created by gan on 2019/11/17 22:00.
*/
public interface ITarget { void doSomething(String commond);
}

  员工A和员工B(真正干活做事的人)实现接口做自己擅长的工作。

public class TargetA implements Itarget {

    @Override
public void doSomething(String commond) {
System.out.println("我是员工A,我擅长加密,我现在开始干:" + commond);
}
} public class TargetB implements Itarget { @Override
public void doSomething(String commond) {
System.out.println("我是员工A,我擅长解密,我现在开始干:" + commond);
}
}

  项目经理持有所有小组员工的成员,他根据一定的策略选择干活的人。

public class TeamLeader {

    private Map<String, Itarget> targets = new HashMap<>();

    /**
* 项目经理持有小组成员名单科通选择,类似于策略模式
*/
public TeamLeader() {
targets.put("加密", new TargetA());
targets.put("解密", new TargetB());
} /**
* “调度方法”
*/
public void dispather(String commond) {
targets.get(commond).doSomething(commond);
}
}

  Boss下达命令:

public class Boss {

    public commond(String commond, TeamLeader leader) {
leader.dispather(commond);
}
}

  使用:

public class DelegateTestDemo {

    public static void main(String[] args) {
Boss boss = new Boss();
boss.commond("加密", new TeamLeader());
}
}

总结:

  委派模式在实际开发中非常常用,比如我们写的Controller就是委派具体的Service干事情,Service也委派Dao干事情。 Spring中也有很多使用委派模式的地方,比如我们常见的DispatcherServlet 里面的service就大量使用委派模式

  再比如我们使用的HttpServlet里面也使用了委派模式:

 在一些框架源码中,比如Spring等,命名一Delegate结尾比如BeanDefinitionParserDelegate(根据不同的类型委派不同的逻辑解析BeanDefinition),或者是以Dispacher开头和结尾或开头的比如DispacherServlet一般都使用了委派模式。

代码链接:https://gitee.com/ganganbobo/gps-parent

最新文章

  1. smarty下如何将一个数保存为两位小数
  2. vs2012 error c4996: This function or variable may be unsafe
  3. web安全及防护
  4. html下拉菜单的实现
  5. Swing组件Jtree,JTablePane选项卡运用
  6. bzoj 2244: [SDOI2011]拦截导弹 cdq分治
  7. 二维卷积c代码
  8. Javascript进阶篇——(DOM—认识DOM、ByName、ByTagName)—笔记整理
  9. Sprintf()的思考和引出的相关问题
  10. [SDOI2015]序列统计
  11. NodeJs之word文件生成与解析
  12. Build 2019 彩蛋
  13. Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架
  14. HDU 5391 Zball in Tina Town【威尔逊定理】
  15. GreenDao与ReactiveX的完美搭配
  16. python语言中的数据类型
  17. (原+转)使用anaconda遇到的问题
  18. Ubuntu清理系统垃圾 命令
  19. 零基础学python之构建web应用(入门级)
  20. JAVA学习目录

热门文章

  1. 让你的shell更体贴
  2. cpu指令重排序的原理
  3. Android apk在线升级
  4. 运维笔记--ubuntu服务器安装telnet服务
  5. zk单点部署
  6. osg::Node源码
  7. CentOS7 安装特定版本的Docker
  8. OpenShift环境中手工模式添加etcd server
  9. Axure中继器设置单选
  10. Java抓取Codeforces——针对某一次提交的源码和数据