结构型模式之代理模式(八)

news2024/11/15 23:28:18

常说的设计模式是23种设计模式,分为3大类:

  • 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
  • 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
  • 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。

上次咱们把创建型模式的5种模式都介绍完了,还额外介绍了简单工厂模式。

上次咱们说了“适配器模式”。今天来看一看结构型模式中的“代理模式”。

结构型模式重点在于结构的变化。“代理模式”的“代理”可以帮助我们理解其初衷。

生活中有很多事情需要有“代理”。例如“租房需要中介代理找房”、“结婚需要婚庆公司代理婚庆”等等这样的事情。

首先,我们有一个接口,可以说是“要做什么事情”

例如“要结婚”

例如“要租房”

其次,具体实现接口的类,可以说是“真实实现要做的事情”。

例如“具体实现要结婚的事情”

例如“具体实现要租房的事情”

最后,用代理模式搞定前后事宜。

 

例如“房屋中介带你看房及后续签订合同”

例如“婚庆公司为你进行典礼及收尾”

测试类中应用:

上面用的是静态代理模式,下面我们来用“动态代理模式”看看效果。

在原有接口和真实类的基础上,构建“动态代理模式”。

在这里,我们重点应用Proxy的“动态代理模式”叫做“JDK动态代理”,利用反射机制,达到动态获取对象并执行功能方法,也就是上述的“程序流程”。(Proxy的应用,可参考API说明文档中的说明,加以理解)。

测试方法应用:

又到了讲故事的时间了。我们来设置一个《西游记》里的一个场景。

话说猪悟能(也就是后来的猪八戒),在高老庄想娶高翠兰为妻。本来正常情况,猪悟能与高翠兰结婚。

但是高翠兰妈妈不同意,于是派人去请道士降伏猪悟能。又恰巧遇见唐僧和孙悟空师徒,于是请孙悟空去降伏猪妖。

结果让猴子做代理,猪悟能就倒霉了,想不到猴子会变成高翠兰蒙骗结婚,还被降伏,拜在唐僧门下,获法号“八戒”。自此猪八戒跟随唐僧去西天拜佛求经。

不得不说,猴子这个“代理”做的称职又到位,不光是降伏,连猪都带走了。

从上述场景设定中,我们能分析出,“结婚”是主要目的,真实类是高翠兰实现“结婚”的行为,猪八戒要调用高翠兰的行为,正常情况下,和高翠来结婚。但猴代理出现,更改了结婚行为,突然给老猪安排得“妥妥当当”。

接口

真实类:

猪类:

正常情况调用,高翠兰与猪悟能结婚了:

但是猴代理出现了:

静态代理:

猪悟能调用了静态代理:

JDK动态代理:

突然结婚对象变成了猴子,请求出老猪的心理阴影面积。

即使真实类不是高翠兰,只要“大圣”这个金牌代理在,猪八戒就铁定去西天拜佛求经。


以上就是今日分享,如果你喜欢记得点赞收藏,以防找不到我!

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

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

相关文章

非零基础自学Golang 第15章 Go命令行工具 15.5 代码测试(test) 15.5.1 单元测试

非零基础自学Golang 文章目录非零基础自学Golang第15章 Go命令行工具15.5 代码测试(test)15.5.1 单元测试第15章 Go命令行工具 15.5 代码测试(test) go test命令用于对Go语言编写的代码包进行测试。 可以指定要测试的文件,也可以直接对整个包进行测试&#xff0c…

[Java实战]Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]

Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]1.Squaretest是什么?2.如何配合JUnit使用...?3.生成的java文件长啥样?4.如何生成和使用?5.如何用生成的XXXTest.java文件进行单元测试...6.观察结果7.单元测试成功8.源码地址为了好好写单元测试,提…

Dell inspiron 7580硬件升级_更换电池加内存条移动硬盘

文章目录前言硬件升级确认硬件型号参数拆机验证硬件更新后记前言 手上的笔记本[Dell inspiron 7580]用了几年了,还是刚上大学的时候买的,现在感觉这个配置用起来有点吃力了,稍微更新一下配置准备再战两年┭┮﹏┭┮ Light em up, light em u…

参数扫描文件的用法

摘要 通过控制和改变所选参数有助于检查给定光学系统的性能。 VirtualLab Fusion提供了完全灵活且计算效率高(通过并行化)的参数运行,使用户可以指定不同的参数变化方式。 作为示例,它可以用于所研究的任何系统参数的公差分析。 分…

Moonbeam生态说|Moonbeam Ignite重燃DeFi生态活力

日前,Moonbeam Network生态中两家活跃度最高的DeFi协议Moonwell和StellaSwap受邀参加Moonbeam中文社区BinanceLive直播。 作为Moonbeam生态的老朋友,两家项目方的联合创始人对赋能生态胸有成竹。 今年11月,Moonwell和StellaSwap都得到社区投票…

MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 × 51 USING SPARSITY

论文链接: https://arxiv.org/pdf/2207.03620.pdf code: https://github.com/VITA-Group/SLaKlink MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 51 USING SPARSITY一、引言(二)、大内核注意力(二)、卷积中的大…

I/O多路转接 —— select、poll、epoll

目录 一、概述 二、I/O多路转接 —— select 1. select函数的基本介绍 2. select的基本工作流程 3. 文件描述符的就绪条件 4. 基于select函数设计的服务器 1. 基本套接字的编写 2. select服务器的编写 5. select的优缺点 三、I/O多路转接 —— poll 1. poll函数的基…

LeetCode-1799- N 次操作后的最大分数和

1、状态压缩动态规划 我们可以使用动态规划来解决问题,我们利用数组dp[s]dp[s]dp[s]来表示状态为s时,能够去到的最大分数。由于题目限定了n的范围,因此我们可以利用二进制数字s来压缩状态,我们利用长度为m的二进制数s的每一位来表…

Javascript | Popper | 如何下载popper.min.js 与 各类js资源

文章目录问题描述解决办法问题描述 作为一个JS生手只知道使用CDN在线引用或者使用下载好的本地JS文件。 比如popper.js官网显示如下图,没有任何的Download按钮,有部分其他类的JS官网也存在同样的情况。 虽然有提供CDN,但因为国内网络原因&am…

Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。 Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。 Lua table 是不固定大小的,你可以根据自己需要…

什么是python,为什么要学习Python?

什么是python? 人工智能概念的兴起,使得Python的发展非常迅速,关注度也是越来越高。作为现在最热门的编程语言,Python简单优雅,用尽量少的代码写出最明白的程序,简单易学的特性使其拥有超高的人气&#xf…

VUE—跳转传参

目录 一、基本使用 二、$route和$router 三、路由跳转的两种方式 四、编程式导航 五、传参 六、props 一、基本使用 1、安装vue-router cnpm install --save vue-router3 如果大家用的是vue2,下载vue-router不设置版本好的话,可能会因为版本过高…

大数据Kudu(十一):ClickHouse与Kudu对比

文章目录 ClickHouse与Kudu对比 ClickHouse与Kudu对比 kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者都是列式存储,都可以针对数据进行实时OLAP分析,两者的区别如下: 方面 Kudu

零基础小白如何做到5个月学成Python?学习规划在这里!

自学半个月没用不是正常的吗?一般来说,Python培训需要脱产学习5个月左右,这样的市场既能掌握工作所需的技能,还能够积累一定的项目经验。 当然,如果你想要在Python的路上越走越远,则需要不断的积累和学习&…

实验二 单隐层神经网络

一、实验目的 (1)学习并掌握常见的机器学习方法; (2)能够结合所学的python知识实现机器学习算法; (3)能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

我们是如何构建自己的可观测性的

引言 近日,关于云平台自身的可靠性问题又成为大家关注的焦点。系统一定会有故障,相信作为用户都能理解,但用户需要在故障发生后,能尽快知晓造成故障的根本原因和修复计划,以便有效调整受影响的业务来降低损失&#xf…

盘点2022年电视行业:科技与美学的战场三星缔造“生活方式”的全新价值

作者 | 曾响铃 文 | 响铃说 前不久,中国质量协会第十一次组织开展了本年度电视行业用户满意度监测,监测对象为市场占有率达90%以上的10个主流电视品牌,结果显示2022年电视行业用户满意度为83分,同比持平,处于较高水平…

【Ctfer训练计划】——(三)

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

Linux系统安装Zookeeper教程

原文链接 在root账户下创建zookeeper安装目录: mkdir /home/zookeeper进入zookeeper目录: cd /home/zookeeper通过wget命令下载zookeeper安装包: wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

spring+jsp面向社区健康服务的医疗平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三章系统分析与设计 11 3…