ios 代理和委托的区别
来源:互联网 发布:装修接单软件 编辑:程序博客网 时间:2024/05/26 05:52
搜索之,看到了两篇文章,一时不能嚼透,留待日后细究。
特别是关于那个延迟实例化的的好处,不大理解。
代理(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),为其他对象提供一种代理,以控制对这个对象的访问。属于结构型模式,它为一个对象提供替代者或占位者,客户端通过代理对象访问目标对象,代理对象在客户端和目标对象之间起到中介的作用。
有以下几种代理:
- 远程代理(Remote proxy),为一个不同地址空间或网络上的对象提供本地代表。好处是代理对象将网络的细节封装起来,客户端不必关心网络的存在。
- 虚拟代理(Virtual proxy),根据需要创建重型或开销很大的对象。如果需要创建一个资料消耗较大的对象,先创建一个开销较小的对象来占位表示,等真正需要时才创建实体对象。这里起到了延迟对象实例化,来减缓对系统资源的消耗的作用。
- 保护代理(protection proxy),通过不同的访问权限控制对原始对象的访问。
- 智能引用代理(Smart reference proxy),当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
代理模式结构图:
代理模式中的角色都实现的类似相同的接口,客户端向Proxy发送request消息时,Proxy持有RealSubject的引用,会将消息通过request接口转发给RealSubject对象,RealSubject会执行实际的操作间接满足了客户端的请求。
虚拟代理实现图片延时加载
在ios中应用开发中,经常需要显示大量的图像,如定义一个允许用户浏览相册的需求,视图以列表的形式呈现。如果将相册中的图片全部加载又不可行,移动设备上的内存很有限,必然会影响性能。而且在图像渲染到屏幕上之前,系统需要进行从磁盘上加载图片、解压缩等一些耗时操作,这些可能会影响视图显示的即时性。通过虚拟代理实现图片延时加载可以很好的解决这些问题,实现的方式如下图所示。
图中ImageLoadProtocol协议表示代理模式中的抽象类,并定义了loadImage接口,ImageLoader表示目标对象,而ImageViewController既充当代理对象,它也是代理模式中的客户端角色,本来客户端角色应该是继承UITableView的子类来表示,但是这里视图不是通过继承,而是使用ios中的delegate委托模式把处理数据、加载图片等这些本属于UITableView的工作给它的委托对象ImageViewController来完成,这样ImageViewController也就相当于充当了客户端角色。
代理模式的优缺点
优点:
- 当目标对象比较复杂时,客户端使用起来可能太复杂,这时可以通过代理对象封装目标对象的细节,使客户端通过代理对象访问目标对象变得简单,这样不仅降低了复杂性,也降低了耦合性。
- 延迟对象的创建和实例化,减少系统资源的消耗,提高系统性能。
Proxy和ios中的delegate区别
在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。
委托模式,是简单的强大的模式,可让一个对象扮演另外对象的行为。委托对象保持到另外对象的引用,并在适当的时候发消息给另外对象。委托对象可以在发送消息的时候做一些额外的事情。
代理模式,代理模式一般要更严格,若干对象实现一个共同的接口。委托只是引用被委托对象。
代理模式(Proxy)与装饰模式(Decorator)
它们都提供间接访问对象层,都保存被调用对象的引用。
代理模式(Proxy),为另一个对象提供一个替代或占位以控制对这个对象的访问。
装饰者(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活,它避免了类爆炸问题,像装饰者(Decorator),代理模式(Proxy)组成一个对象并提供相同的接口,但代理模式并不关心对象动态职能的增减。
在代理模式(Proxy)中Subject定义了主要的功能,而且Proxy根据Subject提供功能控制对象的访问权限。在装饰者(Decorator)中Component只是提供了其中的一些功能,需要通过装饰链动态给对象增加职能。
- ios 代理和委托的区别
- iOS-代理委托的使用
- iOS-代理委托的使用
- iOS的代理(委托设计模式)和分类
- iOS中的委托和代理模式
- iOS中通知和代理的区别
- iOS block和代理的区别
- IOS-UITextFiled常见的委托代理使用方法
- 关于iOS 委托 代理 协议 的理解
- IOS -- UITextFieldDelegate委托代理
- IOS委托代理代码
- iOS:且说委托代理
- ios 开发之协议,非正式协议,委托(代理)区别
- IOS 委托和协议区别和联系
- IOS 委托和协议区别和联系
- IOS 委托和协议区别和联系
- IOS 委托和协议区别和联系
- IOS 委托和协议区别和联系
- tomcat问题,jsp页面无法编译,web页面一片空白,log显示空指针,在tomacat的work文件夹下没有生成相应的Java文件
- 区间调度问题
- Maya: 菜单 编辑网格 >偏移循环边工具
- Python学习教程(五)
- 浅谈缺陷修复人预测(Bug Triaging)
- ios 代理和委托的区别
- Maya: 菜单 编辑网格 >添加分段
- poj3435
- 14条建议,使你的IT职业生涯更上一层楼
- 快速排序 代码实现
- GetWindowText 功能
- Spice代码分析(三)——red_worker: red_init
- Poj 1014 Dividing(多重背包)
- Maya: 菜单 编辑网格 >滑动边工具