为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向proxy对象第一次提出请求的时候,proxy实例化真实的对象,并且将请求传给它,以后所有的客户都经由proxy传给封装的真是对象。
远程代理(Remote Proxy):本地的代理对象控制一个远程的对象。
虚拟代理(Virtual Proxy):Proxy不会生成一个真实的耗费代理,知道分成有必要时(首次有请求)。它用来存放花费大(实例需要很长时间)的真实对象。
安全代理(Protection Proxy):代理检查调用真实对象所需要的权限。
范例:1.信用卡付款,当我们采用信用卡付款,其实就是通过信用卡银行给客户付账付款。
2.图片代理,假定我们需要设计一个很多图片的编辑器,文档中需要装载和现实很多图片,如何能是的图片的处理不会对装载很编辑文档的速度有很大的影响。可以使用代理类来管理图片,它只会在图片出现在可见部分时才从数据库装载真是的图片。
3.快捷方式,windows操作系统上的桌面快捷方式及快捷工具栏是迅速打开应用程序的代理。
优势和缺陷:
当对象在远程机器上,要通过网络来生成时,速度可能会慢,此时应用Remote Proxy模式,可以掩饰对象有网络生成的过程,系统的速度会加快;对于大图片的加载,Virtual Proxy模式可以让加载在后台运行,前台用的Proxy对象使得整体运行速度得到优化;Protect Proxy可以验证对真实对象的引用权限。
代理模式的缺陷是请求的处理速度会变慢,并且实现Proxy模式需要额外的工作。