1 概述
有时我们会遇到这样的问题:要在多个地方,使用到一个远程对象,这样我们需要写加载远程对象的方法;统计一个对象被引用的次数;要一次创建很多大对象,但我们又不是立刻就能用到所有的对象。在这些问题中,所有的要被调用的对象功能均已实现,但又缺少一些其它的功能,如在创建时异步加载、统计引用次数,延迟加载等,要添加这些公共的功能,又不能破坏原有对象职责的单一性。遇到这样的问题,我们要用到——代理模式
2 GOF 定义
意图:
为其他对象提供一种代理以控制对这个对象的访问
结构图:
备注:
Subject:客户所希望的对象接口
RealSubject:是真正实现了这个对象接口的方法。
Proxy:引用了RealSubject对象,并负担一些额外的职责如异步加载、统计引用次数,延迟加载等。
这样真正实现的对象,还是按以前的实现,只需要实现自己的功能,而别外一些异步加载、统计引用次数的功能则由代理对象来实现。