一篇博客读懂设计模式之---委派模式

一篇博客读懂设计模式之—委派模式

委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下

what:是什么?
委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务,既然有委托,那么就有两种角色:委托类和受托类,这两个角色在社会上的关系是平等的,类似于我们现实中的产品经理和普通员工的关系,产品经理委托员工来帮他完成任务,产品经理只关心结果:你做好没?至于怎么做他并不关心,典型的干活的是你(普通员工)成功是我的(项目经理),委派模式也是只关心结果。

why:为什么会出现这种模式:为了隐藏一些具体的实现逻辑

区别:
与其他模式有什么不同;
工厂模式:为了保证结果的多样性,但是对于用户来说只有一个方法,它是一种有固定模式的委派模式,工厂模式有属于自己的一些固定模板,如下:

在这里插入图片描述
不理解的可以去参考我的另一篇博客:一篇博客读懂设计模式之—工厂模式

**代理模式:**虽然代理模式也是设计到两个对象之间的关系,并且代理对象要持有被代理对象的引用,但是 代理模式更关心的是执行的过程,而委派模式只关心结果,并且委派模式的两个对象地位是平等的,都要实现同一个接口!

下面举个例子让你更好的理解委派模式:
先实现一个接口Executor;

public interface Executor {void executing();
}

实现两个受托类:

public class StaffA implements Executor {@Overridepublic void executing() {System.out.println("staff A executor task!");}
}
public class StaffB implements Executor {@Overridepublic void executing() {System.out.println("staffB execute task");}
}

再添加一个委托类:

public class Boss implements Executor {private  Executor executor;//这个构造方法是关键Boss(Executor executor){this.executor = executor;}@Overridepublic void executing() {System.out.println("boss start dispatcher job!");//看上去好像是我们的项目经理在干活//但实际干活的人是普通员工//这就是典型,干活是我的,功劳是你的executor.executing();}
}

最后添加一个测试类:

public class TestExecutor {public static void main(String[] args) {Boss boss = new Boss(new StaffA());boss.executing();Boss boss1 = new Boss(new StaffB());boss1.executing();}
}

从上面的测试类我们可以看出,虽然表面看起来是Boss在干活,但是实际上是对应的员工在干活(通过构造器传入需要干活的员工)

任务完成!
欢迎留言点赞!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML模板解析————Dom4j解析xml案例分析

引言 目前项目中包含大量的xml模板文件,现就xml模板的数据解析、提取、及部分常用方法做简单的应用和总结。 一、XML文件转为Document对象 通过SAXReader对象的read方法,读取Document对象。 SAXReader reader new SAXReader(); Document document …

教你如何一篇博客读懂设计模式之—--工厂模式

一篇博客读懂设计模式之—工厂模式 工厂模式在我们日常开发的时候经常用到,相信大家都有了一定的了解,工厂模式是一种创建对象的设计模式,它提供一种创建对象的最佳方式。 主要过程是: 定义一个创建对象的接口,让其子…

Jackson快速入门

引言 上一篇博客《XML模板解析————Dom4j解析xml案例分析》简单讲解了关于xml模板的解析,使用到了dom4j,这篇文章其实算是个姊妹篇,都是对于目前工作中的一些任务,如xml、json相互解析所涉及到的知识。 但是相对于xml而言&am…

一篇文章读懂MySQL的各种联合查询

一篇文章读懂MySQL的各种联合查询 联合查询是指将两个或两个以上的表的数据根据一定的条件合并在一起! 联合查询主要有以下几种方式: 全连接:将一张表的数据与另外一张表的数据彼此交叉联合查询出来 举例如下: 先建两张表: CR…

Class.forName()、Class.class、getClass() 区别

问:简单谈谈你对 Java 中 Class.forName()、Class.class、getClass() 三者的理解? Class.class 的形式会使 JVM 将使用类装载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回 Class 对象…

教你如何一篇博客读懂设计模式之—--原型模式

教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他们的地址也…

Java反射————Method根据方法名称字符串调用方法

引言 之前浏览廖雪峰老师的个人博客网站,无意间发现了关于在Java8中获取参数的方法,随手一转《Java 8中获取参数名称》,没想到今天遇到一个功能,非常符合这种反射调用的使用场景。回看了这篇之前转载的文章,然后根据自…

一篇文章看懂@Scheduled定时器/@Async/CompletableFuture

一篇文章看懂Scheduled定时器/Async/CompletableFuture Scheduled注解解析: 1.cron:最重要的一个参数 cron表达式[秒] [分] [小时] [日] [月] [周] [年]([年]可省略) 简单了解一下,网上有现成的工具 示例&#xff…

一篇搞懂HTTP协议

本文转自 :flyhero 码上实战《一个HTTP打趴80%面试者》 HTTP协议简介 HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2) 协议&…

注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办

注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办? 跟浏览器语言的设置有关,将语言改为英文即可,亲测有效!

Jackson高级操作————节点树

引言 继《Jackson快速入门》基础篇之后的树模型相关操作。 节点树模型 ObjectMapper构建JsonNode节点树,类似于DOM解析器的XML。 Testpublic void testJsonTree() throws JsonProcessingException, IOException {String jsonString "{\"name\":\…

spring源码分析第一天------源码分析知识储备

spring源码分析第一天------源码分析知识储备 Spring源码分析怎么学? 1、环境准备; 2、思路 看:是什么? 能干啥 想:为什么? 实践:怎么做? 调试的时候,完全可以在…

Jackson高级操作————流式API与JsonGenerator、JsonParser

引言 继《Jackson快速入门》之后的高级相关操作。 Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API,这种方式开销小,性能高,因此,如果应用程序或者程序逻辑对于性能有一定要求,可以使用这种…

Mysql高级教程思维导图

Mysql高级教程思维导图 1、思维导图总览: 2、MySQL架构介绍: 2.1、MySQL简介 2.2、MySQL Linux版安装 2.3、MySQL配置文件 2.4、MySQL逻辑架构介绍 2.5、MySQL存储引擎 2.6、MySQL的用户和权限管理 2.7、MySQL一些杂项配置 ’ 3、索引优化分析 3.1、性…

Eclipse(STS 4)闪退导致EGit插件异常

引言 到目前为止,STS已经闪退过三次了。 问题很棘手,我需要冷静。 首先出现了一个问题就是,EGit无法commit。 第二个问题是切换分支报错。 闪退重启后EGit无法提交代码 观察闪退出现的时机,一般出现在我 commit 代码的时候&…

spring源码分析第二天------spring系统概述以及IOC实现原理

1、Spring5 概述 Spring 是一个开源的轻量级 Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架, 其目的是用于简化企业级应用程序开发。 Spring 框架除了帮我们管理对象及其依赖关系,还提供像通…

Linux进阶之路————Linux概述

引言 Linux是一个开源、免费的操作系统。学习Linux知识分为以下几个阶段: 第一阶段:Linux环境下的基本操作命令,包括文件操作命令(rm、mkdir、chmod、chown)编辑工具使用(vi、vim)Linux用户管…

spring源码分析第三天------spring核心IOC容器和依赖注入原理

基于XML的依赖注入 1、依赖注入发生的时间 当 Spring IOC 容器完成了 Bean 定义资源的定位、载入和解析注册以后,IOC 容器中已经管理类 Bean 定义的相关数据,但是此时 IOC 容器还没有对所管理的 Bean 进行依赖注入,依赖注入在以下两种情况 …

Linux进阶之路————远程登录与vim编辑器

远程登录 远程的Linux系统中,如果希望通过ssh协议登录,那么在Linux需要有一个sshd服务监听22端口,也就是说要想通过ssh登录远程linux,那么linux必须安装sshd服务,并开启。这是一个远程登录成功的前提。 vi、vim编辑器…

JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

JavaWeb中监听器Listener过滤器filter拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>listener–>filter–>servlet–>interceptor(指的是拦截器) 1.概念 context-param:就是一些需要初…