消息转发 不仅参照了多继承,它还让用轻量级对象代替重量级对象成为了可能。
通过代理(Surrogate)可以为对象筛选消息。
代理管理发送到接收者的消息,确定参数值被复制,拯救等等。但是它不企图去做很多其他的,它不重复对象的功能只是简单地提供对象一个可以接收来自其他应用消息的地址。
举个例子,有一个重量级对象,里面加入了许多大型数据,如图片视频等,每次使用这个对象的时候都需要读取磁盘上的内容,需要消耗很多时间(time-consuming),所以我们更偏向于采用懒加载模式。
在这样的情况下,你可以初始化一个简单的轻量级对象来代理(surrogate)它。利用代理对象可以做到例如查询数据信息等,而不用加载一整个重量级对象。如果是直接用重量级对象的话,它会一直被持有占用资源。当代理的forwardInvocation:方法第一次接收消息的时候,它会确保对象是否存在,如果不存在边创建一个。
当这个代理对象发送的消息覆盖了这个重量级对象的所有功能时,这个代理对象就相当于和重量级对象一样。
创建一个轻量级的对象来代理一个重量级对象,完成相对应的功能,而不用一直持有着重量级对象,从而可以减少资源占用。
以后找个时间,写一个Demo
网友评论