1.为对象A提供一种代理,以控制对对象A的访问。
1.代理类需要使用被代理类来做业务逻辑,所以代理类需要包含被代理类的实例,这跟适配器模式是一样的。
含有真实主题的引用,可以在任何时候操作真实主题,,可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截或在调用后进行某些操作。
常会再为代理类和被代理类抽象出一个公共接口。这个接口的目的之一是约束双方的行为,让Proxy必须实现某些方法,而这些方法恰恰是对外公开的主要业务方法。
不过proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。
“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。作为间接层的proxy对象便是解决这一问题的常用手段。
具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。
2.使用代理模式的情况
远程代理:webservice
虚拟代理:异步打开网页图片;
安全代理:控制真实对象的访问权限;
智能指引代理:附加内务处理;
http://www.cnblogs.com/chenbw/archive/2010/05/20/1739777.html
3.与其它模式的区别
相同点:
对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一个 接口。
对代理模式来说,代理类(proxy class)和真实处理的类(real class)都实现同一个接口。
此外,不论使用哪一个模式,都可以很容易地在真实对象的方法前面或者后面加上自定义的方法。
Proxy、Facade以及Adapter可能都是对对象的一层封装,侧重点不同。
不同点:
装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。
用代理模式,代理类可以对它的客户隐藏一个对象的具体信息。当使用代理模式的时候,常常在一个代理类中创建一个对象的实例。
而当使用装饰器模式的时候,通常的做法是将原始对象作为一个参数传给装饰者的构造器。
使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
真实对象隐藏在代理对象内部,而装饰对象是客户代码都要知道的。
装饰模式的重点在于扩展,适配器和代理模式体现的是封装,代理模式控制是重点。
Facade针对封装子系统,转化为高层接口,是对多个类的集成、统一适配。