概述:

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

    RAID称为廉价磁盘冗余阵列.RAID的基本想法是把多个便宜的小磁盘组合在一起.成为一个磁盘组,使性能达到或超过一个容量巨大.价格昂贵的磁盘. 2.级别介绍 RAID 0连续以位或字节为单位分割数据, ...

  2. 一天一经典Efficient Estimation of Word Representations in Vector Space

    摘要 本文提出了两种从大规模数据集中计算连续向量表示(Continuous Vector Representation)的计算模型架构.这些表示的有效性是通过词相似度任务(Word Similarit ...

  3. IOI2019题解

    由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...

  4. QQ for Mac聊天纪录怎么查找??

    在你Mac上打开你的QQ,选择任意聊天窗口,打字的上面有6个图表快捷键,第6个就是查看聊天记录的功能键

  5. ES6 展开运算符 三个点实际功能

    1.数组中使用let defaultColors = ['red', 'greed'] let favoriteColors = ['orange', 'yellow'] let fallColors ...

  6. Automatic Ship Detection in Optical Remote Sensing Images Based on Anomaly Detection and SPP-PCANet

    基于异常检测和 PCANet 的船舶目标检测 船舶检测会遇到三个问题: 1.船低对比度 2.海平面情况复杂 3.云,礁等错误检测 实验步骤: 1.预处理海陆边界,掩膜陆地 2.异常检测获得感兴趣区域, ...

  7. SpringMVC自定义类型转换器

    SpringMVC 自定义类型转换器  我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,我们可以在默认的spring-servlet.xml加上如下的配置即可做到普通数据 ...

  8. java spring学习

    目的:为后面学习spring mvc ssm spring boot 打基础. 从单词就能看到有s,记录自学过程,感慨spring 一篇文章都写不完 介绍(来源百度百科): Spring是一个开源框架 ...

  9. Net core学习系列(五)——Net Core应用程序Startup类介绍

    一.Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseSt ...

  10. Java-Maven(十一):Maven 项目出现pom.xml错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin

    Maven项目出现ERROR: eclipse更新了Maven插件后,让后就出现了以下错误: Description Resource Path Location Type Conflicting l ...