代理模式的定义
为其他对象提供一种代理以控制对这个对象的访问
Proxy:代理对象
实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象。保存一个指向具体目标对象的引用,可以在需要的时候调用具体的目标对象。可以控制对具体目标对象的访问,并可以负责创建和删除它 Subject:目标接口,定义代理和具体目标对象的接口,这样就可以在任何使用具体目标对象的地方使用代理对象RealSubject:具体的目标对象,真正实现目标接口要求的功能
public interface Subject {
public void request();
}
public class RealSubject implements Subject {
@Override
public void request() {
// 具体执行的功能处理
}
}
public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
// 在转调具体的目标对象前,可以执行一些功能处理
// 转调具体的目标对象的方法
realSubject.request();
// 转调具体的目标对象后,可以执行一些功能处理
}
}
代理模式的功能
代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端并没有什么影响,就跟得到了真实对象一样来使用正是因为有代理对象夹在客户端和被代理的真实对象中间,相当一个中转,那么在中转的时候就可以进行一些操作,例如判断权限 代理的分类
虚代理:根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正创建代理远程:用来在不同的地址空间上代表同一个对象,这个不同的地址空间可以是在本机上,也可以在其他机器上。在Java里面最典型的就是RMI技术copy-on-write代理:在客户端操作的时候,只有对象确实改变了,才会真正的拷贝(或克隆)一个目标对象,算是虚代理的一个分支保护代理:控制对原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限,以控制他们对原始对象的访问Cache代理:为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果防火墙代理:保护对象不被恶意用户访问和操作同步代理:使多个用户能同时访问目标对象而没有冲突智能指引:在访问对象时执行一些附加操作,比如,对指向实际对象的引用计数、第一次引用一个持久对象时,将它装入内存等 代理模式的特点
代理模式的本质
控制对象访问 何时选用代理模式
需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理需要按照需要创建开销很大的对象的时候,可以使用虚代理



