搜索之,看到了两篇文章,一时不能嚼透,留待日后细究。

特别是关于那个延迟实例化的的好处,不大理解。

代理(Proxy)和委派(Delegate)的区别

http://hi.baidu.com/thinkinginlamp/item/8b54ea0b54eaea10addc70e8

Objective-C 设计模式-代理模式 (Proxy)

http://www.cnblogs.com/markhy/archive/2013/06/09/3125494.html

第一篇:

模式是程序员之间的交流语言,代理(Proxy)和委派(Delegate)是模式中常见的词汇,不过很多人把他们混淆了,甚至等同起来,这会造成很多沟通交流上的误解,下面说说他们的区别,先看一个UML图:

图形已经表述的很直白了,如果还不清晰,可以看看下面的代码:

01 interface Subject
02 {
03     public function DoAction();
04 }
05
06 class RealSubject implements Subject
07 {
08     public function DoAction()
09     {
10         echo '_RealSubject::DoAction_';
11     }
12 }
13
14 class Proxy implements Subject
15 {
16     public function __construct()
17     {
18         $this->subject = new RealSubject();
19     }
20
21     public function DoAction()
22     {
23         echo 'Proxy::DoAction';
24         $this->subject->DoAction();
25         echo 'Proxy::DoAction';
26     }
27 }
28
29 $proxy = new Proxy();
30 $proxy->DoAction();

运行结果输出:Proxy::DoAction_RealSubject::DoAction_Proxy::DoAction

如果你还没有看出端倪,我就再废话几句:首先从词性来看,代理(Proxy)是名词,委派(Delegate)是动词,其次代理说明了若干个对象实现了一个共同的接口,而委派只是说明一个对象引用了另一个对象,并不牵扯接口。

第二篇:

代理模式定义

  代理模式(Proxy),为其他对象提供一种代理,以控制对这个对象的访问。属于结构型模式,它为一个对象提供替代者或占位者,客户端通过代理对象访问目标对象,代理对象在客户端和目标对象之间起到中介的作用。

有以下几种代理:

  1. 远程代理(Remote proxy),为一个不同地址空间或网络上的对象提供本地代表。好处是代理对象将网络的细节封装起来,客户端不必关心网络的存在。
  2. 虚拟代理(Virtual proxy),根据需要创建重型或开销很大的对象。如果需要创建一个资料消耗较大的对象,先创建一个开销较小的对象来占位表示,等真正需要时才创建实体对象。这里起到了延迟对象实例化,来减缓对系统资源的消耗的作用。
  3. 保护代理(protection proxy),通过不同的访问权限控制对原始对象的访问。
  4. 智能引用代理(Smart reference proxy),当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。

代理模式结构图:

代理模式中的角色都实现的类似相同的接口,客户端向Proxy发送request消息时,Proxy持有RealSubject的引用,会将消息通过request接口转发给RealSubject对象,RealSubject会执行实际的操作间接满足了客户端的请求。

虚拟代理实现图片延时加载

  在ios中应用开发中,经常需要显示大量的图像,如定义一个允许用户浏览相册的需求,视图以列表的形式呈现。如果将相册中的图片全部加载又不可行,移动设备上的内存很有限,必然会影响性能。而且在图像渲染到屏幕上之前,系统需要进行从磁盘上加载图片、解压缩等一些耗时操作,这些可能会影响视图显示的即时性。通过虚拟代理实现图片延时加载可以很好的解决这些问题,实现的方式如下图所示。

  图中ImageLoadProtocol协议表示代理模式中的抽象类,并定义了loadImage接口,ImageLoader表示目标对象,而ImageViewController既充当代理对象,它也是代理模式中的客户端角色,本来客户端角色应该是继承UITableView的子类来表示,但是这里视图不是通过继承,而是使用ios中的delegate委托模式把处理数据、加载图片等这些本属于UITableView的工作给它的委托对象ImageViewController来完成,这样ImageViewController也就相当于充当了客户端角色。

  

代理模式的优缺点

优点:

  1. 当目标对象比较复杂时,客户端使用起来可能太复杂,这时可以通过代理对象封装目标对象的细节,使客户端通过代理对象访问目标对象变得简单,这样不仅降低了复杂性,也降低了耦合性。
  2. 延迟对象的创建和实例化,减少系统资源的消耗,提高系统性能。

Proxy和ios中的delegate区别

  在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。

委托模式,是简单的强大的模式,可让一个对象扮演另外对象的行为。委托对象保持到另外对象的引用,并在适当的时候发消息给另外对象。委托对象可以在发送消息的时候做一些额外的事情。

代理模式,代理模式一般要更严格,若干对象实现一个共同的接口。委托只是引用被委托对象。

代理模式(Proxy)与装饰模式(Decorator)

它们都提供间接访问对象层,都保存被调用对象的引用。

代理模式(Proxy),为另一个对象提供一个替代或占位以控制对这个对象的访问。

装饰者(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活,它避免了类爆炸问题,像装饰者(Decorator),代理模式(Proxy)组成一个对象并提供相同的接口,但代理模式并不关心对象动态职能的增减。

在代理模式(Proxy)中Subject定义了主要的功能,而且Proxy根据Subject提供功能控制对象的访问权限。在装饰者(Decorator)中Component只是提供了其中的一些功能,需要通过装饰链动态给对象增加职能。

ios 代理和委托的区别相关推荐

  1. iOS 代理反向传值

    iOS 代理反向传值 在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳 ...

  2. kotlin面向对象之接口、代理与委托、单例模式

    接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...

  3. 代理、委托、钩子与打桩

    代理.委托.钩子与打桩 代理 委托 钩子 广义的钩子 打桩 代理   代理(proxy)指的是在需要使用某个事物时,使用另一个事物来代替原本需要的该事物.具体来说,若原本需要某个类的方法,而现在创建了 ...

  4. 第十五节:Expression表达式目录树(与委托的区别、自行拼接、总结几类实例间的拷贝)

    一. 基本介绍 回忆: 最早接触到表达式目录树(Expression)可能要追溯到几年前使用EF早期的时候,发现where方法里的参数是Expression<Func<T,bool> ...

  5. Kotin 的代理和委托

    代理和委托--大头儿子和小头爸爸的洗碗案例 委托,把自己不干的事情交给别人做 代理,做别人委托的事情 kotlin中接口代理关键字:by 1.场景说明(举例) 围裙妈妈只负责做饭,不负责洗碗 小头爸爸 ...

  6. 什么是proxy服务器代理?怎么设置代理服务器?浅谈服务器代理与VPN的区别

    服务器 服务器是计算机的一种,它比普通计算机运行更快.负载更高.价格更贵.服务器在网络中为其它客户机(如PC机.智能手机.ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务.服务器具有高速的C ...

  7. 相同点安卓和iosui的相同点_学UI设计必要分清iOS和Android的设计区别

    原标题:学UI设计必要分清iOS和Android的设计区别 不同平台的设计和开发感觉像是在不同的国家之间旅行.你要做同样的吃吃睡睡看景点的事情,但是这些国家的风俗习惯社会制度会制约你如何吃吃睡睡游览景 ...

  8. iOS @2x @3x图的区别和理解

    苹果官方网页介绍: Icons and Images - Apple Developer iOS用于在屏幕上放置内容的坐标系统是基于点的度量,点映射到屏幕上的像素.标准分辨率显示器的像素密度为1:1( ...

  9. 动态代理jdk和cglib区别、注意事项(private,static,final)、spring aop原理

    文章目录 一.代理简聊 二.静态代理 三.动态代理 1.jdk动态代理 2.cglib动态代理 四.动态代理总结.注意事项 1.jdk动态代理与cglib的区别. 2.注意事项及分析. 五.aop原理 ...

  10. 正向代理与反向代理的理解以及区别

    正向代理与反向代理 参照了知乎以及百度的一些列子,以下说一下自己的理解 - 正向代理 先搭建一个属于自己的代理服务器 1.用户发送请求到自己的代理服务器 2.自己的代理服务器发送请求到服务器 3.服务 ...

最新文章

  1. Depth graph
  2. jquery入门 修改网页背景颜色
  3. Matlab中bwlabel函数的使用
  4. 小米云能同步到华为手机上吗_有没有小米还没涉足的产业?对标百度网盘,小米云盘即将上线...
  5. Samtools安装与使用
  6. 空间简史-人类认识空间的旅程与其对强化学习的启示
  7. 视频聊天创企Tribe获300万美元种子轮融资
  8. Java实现算法导论中反复平方法模取幂
  9. python列拼接dataframe_如何将两个dataframe中的两列合并为新dataframe(pandas)的一列?...
  10. LAMP介绍,Apache安装细节过程
  11. 在windows环境下ftp服务器的文件上传和下载
  12. 数码管显示实验一 编写程序让8只数码管同时显示零
  13. 由IDC机房测试谈主动工作教学实战案例!
  14. webp环境搭建和使用过程
  15. Ztree勾选节点后取消勾选其父子节点
  16. 入门佳作《例解Python》来了!案例丰富尽显风度ƪ(´▽`ƪ)
  17. sqlhelper java_java版sqlhelper
  18. kibana本地安装
  19. 王者荣耀服务器微信怎么和电脑,[技术贴]微信账号与游戏账号独立的终极版教程...
  20. python colorbar字体大小_如何更改colorbar上基数和指数的字体大小?

热门文章

  1. 关于tomcat启动出现To prevent a memory leak, the JDBC Driver has been forcibly unregistered.问题
  2. 浅谈LSTM对于周期时间序列数据的预测
  3. psql计算环比和同比
  4. python人脸检测与微信小程序_[源码和文档分享]基于深度学习Python实现的支持人脸识别和情绪分类的社区APP网站和微信小程序...
  5. java房屋租赁系统-房东租客系统PHP小程序
  6. 【2019】【论文笔记】基于混合石墨烯金属结构的可重构THz Vivaldi天线——
  7. ubuntu系统解决WPS字体缺失
  8. win10如何设置锁屏后不熄屏
  9. 基于 python 的主成分分析步骤及应用实例
  10. Matlab200以内所有质数,用matlab编写一个程序:求出200以内的质数,求!!!!急!!!!!...