概述:

  委派模式有点像代理模式又有点像策略模式。 区别在于代理模式注重过程,委派模式注重结果。 生活中也有很多委派模式的例子:例如公司老板给项目经理下达任务,将任务全权交给项目经理,有项目经理根据一定的策略分配给小组成员,项目经理从跟到尾。项目经理就像是一个老板授权的中介,老板不需要跟小组成员直接联系,甚至可以不知道他们的存在。就像电视剧《楚汉传奇》里面韩信说的,他可以统领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

Java设计模式之委派模式(Dellegate/Dispather)的更多相关文章

  1. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  2. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  3. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  4. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  5. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

  6. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  7. 折腾Java设计模式之模板方法模式

    博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...

  8. 折腾Java设计模式之访问者模式

    博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...

  9. 折腾Java设计模式之命令模式

    博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...

随机推荐

  1. html转为图片插件:html2canvas保存图片模糊问题解决

    使用官网的CDN: <script src="http://html2canvas.hertzen.com/dist/html2canvas.min.js"></ ...

  2. 关于js中onload事件的部分报错。

    当使用onload获取元素时,建议在onload事件之前定义需要获取的元素名称,在onload里面只执行获取操作,这样获取到的元素在后面才能顺利使用. <!DOCTYPE html> &l ...

  3. TCP的连接如何知道对方已经异常断开

    断电的话,对方不会发送任何数据包过来,包括RST.主机无法得知.如果是TCP已经连接,有个定时器,会发送空包,sequence number不变.如果一直收不到ack,会断定对方已经无法通信,而释放系 ...

  4. 单细胞数据整合方法 | Comprehensive Integration of Single-Cell Data

    操作代码:https://satijalab.org/seurat/ 依赖的算法 CCA CANONICAL CORRELATION ANALYSIS | R DATA ANALYSIS EXAMPL ...

  5. Redis常见问题及解决方案

    在Redis的运维使用过程中你遇到过那些问题,又是如何解决的呢?本文收集了一些Redis的常见问题以及解决方案,与大家一同探讨. 码字不易,欢迎大家转载,烦请注明出处:谢谢配合 你的Redis有big ...

  6. Shell流程控制语句while

    while语法格式: while 判断条件 do 命令 done while语句流程控制图: 实例: [root@youxi1 ~]# vim a.sh #!/bin/bash i=0 while [ ...

  7. 【linux基础】Ubuntu16.04桌面突然卡住怎么办?

    使用Ctrl+Alt+F1先进入命令行模式,然后根据问题进行相应的操作. re 1. Ubuntu16.04桌面突然卡住怎么办; 2. Ubuntu下图形界面卡死解决办法; end

  8. [LeetCode] 295. Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  9. GoLand 2019.1 激活破解

    链接://https://blog.csdn.net/hi_liuxiansheng/article/details/89078405

  10. 删除Win10自动下载的更新安装包

    当我们禁止了系统的自动更新后,会感觉还有什么东西没做,没错,你还没有删除系统自动下载好的安装包,如果不删除的话会白白浪费磁盘空间!那么系统自动下载的安装包在哪里呢? C盘Windows—Softwar ...