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

举个例子:

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

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

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

代理模式是什么呢?

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

代理模式的本质:

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

代理模式的应用:

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

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈满iOS

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

Tips:苹果公开的源代码在这里可以查,https://opensource.apple.com/tarballs/

644
来自专栏程序员互动联盟

【android开发】Android HAL模块实现

1. HAL介绍 Android的HAL(Hardware Abstract Layer硬件抽象层)是为了保护一些硬件提供商的知识产权而提出的,是为了避开lin...

3877
来自专栏偏前端工程师的驿站

MyBatis魔法堂:即学即用篇

一、前言                                          本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,...

1886
来自专栏一“技”之长

动态的Objective-C——关于消息机制与运行时的探讨

    Objective-C是一种很优美的语言,至少在我使用其进行编程的过程中,是很享受他那近乎自然语言的函数命名、灵活多样的方法调用方式以及配合IDE流顺畅...

904
来自专栏梅海峰的专栏

利用 JSON-Schema 对 Json 数据进行校验( Python 示例)

本文尝试通过 json 数据校验方法解决如下几个问题:数据没有校验,系统处于裸奔状态,导致后期维护成本高;编写一堆校验代码,混杂在业务代码中,导致代码可读性降低...

2.2K2
来自专栏java一日一条

2017年高频率的互联网校园招聘面试题

参加了2017年校招,面试了阿里、百度、腾讯、滴滴、美团、网易、去哪儿等公司,个人是客户端 Android 方向,总结了面试过程中频率出现较高的题目,希望对大家...

792
来自专栏大前端开发

从编程小白到全栈开发:了解事件机制

在上一篇文章中,我们初步了解了在HTML中处理用户操作的知识,最主要的,就是如何对指定的DOM元素添加事件监听以获取用户操作,并进行后续的处理。这里所使用到的这...

604
来自专栏双十二技术哥

一个Android路由框架的诞生之路

在这个过程中一直强调了组件化的一个基础设施:路由!没有它组件化可以说是寸步难行,本篇文章我们就来谈谈一个组件化路由框架诞生过程中的那些思考。

632
来自专栏程序员维他命

《Effective Objective-C 》干货三部曲(三):技巧篇

继上一篇《Effective Objective-C 》超级干货三部曲(二):规范篇之后,本篇即是三部曲的第三篇:技巧篇。本篇作为三部曲的最终篇,归纳讲解的是本...

812
来自专栏乐沙弥的世界

mongoDB 定长集合(capped collection)

492

扫描关注云+社区