张全蛋和李小花的故事——“代理模式”

举个例子:

假设张全蛋喜欢上了李小花,张全蛋准备给李小花送一些礼物,但张全蛋又非常害羞,因此买了礼物之后让王尼玛代送。王尼玛跑到李小花把礼物送给她之后就走了。

那么问题就来了,李小花误以为礼物是王尼玛送的。

在代码世界中也是一样,张全蛋、王尼玛、李小花是三个对象,张全蛋对象中有一个函数:送礼物,王尼玛对象中也有个函数:送礼物,但王尼玛的送礼物函数只是调用了张全蛋的送礼物函数,也就是送礼物函数的真正实现在张全蛋对象中。然后李小花调用了王尼玛对象中的送礼物函数,李小花并不知道张全蛋的存在,误以为送礼物的函数就是王尼玛的。那么王尼玛这个类就是个代理类。

代理模式是什么呢?

若C类要调用A类中的函数,我们不给C类直接调用,而是在A和C类中间增加一个B类,A类和B类都有相同的函数,只不过B类中的函数都是调用A类的,也就是B类的函数并没有实现,然后C类只与B类交互,让C类感受不到A类的存在。

代理模式的本质:

代理类和被代理类需要实现同一个接口,这样他们有共同的函数。函数真正的实现在被代理类中完成,代理类的每一个函数仅仅是调用了被代理类的对应的函数。

代理模式的应用:

1.远程代理。也就是为一个对象在不同地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2.虚拟代理。当需要创建的对象开销很大时,通过代理对象存放需要很长时间实例化的真正对象。

比如:打开一个有很多图片的HTML页面,它很快就会被打开,但一开始里面只有文字,图片只看到框而没有图片,要过一会儿后图片才会被加载。这里图片的框就是一个代理对象。

3.安全代理。用来控制真实对象访问时的权限。

4.智能指引。当调用真实对象前,代理处理另外一些事情。也就是在访问原本对象之前,再附加一些业务处理。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏龙首琴剑庐

Java基准测试利器OpenJDK-JMH

4789
来自专栏漫漫深度学习路

tensorflow:AToolDeveloperGuideToTFModelFIles

Tensorflow Model Files 最近闲来无聊,想深入理解一下tensorlfow,也不知从何下手,突然间发现了官方文档的Extend模块下还有这个...

3195
来自专栏生信技能树

第2篇:原始数据的质控、比对和过滤

首先对拿到的原始测序数据(fastq或fastq.gz格式)进行质控检测,直接用fastqc软件,再加上multiqc将多个检测结果一起展示。 如:

3763
来自专栏小樱的经验随笔

BZOJ 1293: [SCOI2009]生日礼物【单调队列】

1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2534  Solv...

2565
来自专栏温安适的blog

贪婪算法-单源最短路径

3345
来自专栏深度学习那些事儿

探讨pytorch中nn.Module与nn.autograd.Function的backward()函数

本文讲解基于pytorch0.4.0版本,如不清楚版本信息请看这里。backward()在pytorch中是一个经常出现的函数,我们一般会在更新loss的时候使...

2294
来自专栏锦小年的博客

python学习笔记6.7-简化数据结构的初始化过程

我们每编写一个类的时候都需要编写一个初始化函数,那么如果编写的类当做数据结构来用,它们的初始化结构就是一样的,例如: class Stock: def ...

2066
来自专栏HansBug's Lab

1293: [SCOI2009]生日礼物

1293: [SCOI2009]生日礼物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1096  Solv...

2647
来自专栏图形学与OpenGL

WebGL画点程序v1

本文程序实现画一个点的任务,如下图。其中,点的位置直接给定(“硬编码”)在顶点着色器中。

713
来自专栏Web 开发

做wordpress CMS必须用到的强力代码(转)

这个代码很强力,做一个wordpress cms的索引页面(index.php) 这个代码是必须要会使用,不然会走很多弯路。

982

扫码关注云+社区