本文介绍了GoF中的代理模式。
模式推演
远程代理:
远程代理指的是通过代理可以在本地JVM中,调用远程JVM(另一台计算机)中的对象的方法。参考Java中的RMI。
虚拟代理
例如要显示一张图片,从服务端下载,体验比较好的方式是使用虚拟代理,虚拟代理可以代理Icon,管理图片的加载,在加载未完成时,显示“加载中..”,加载完成后,代理将显示的指责委托给Icon。
保护代理
保护代理就是根据访问权限决定客户可否访问对象的代理。比如说,假设有一个雇员对象,保护代理允许雇员调用对象上的某些方法,经理则可以多调用对象的一些方法(setSalary()等),而HR可以调用所有方法。
Java中的动态代理就可以作为一种保护代理,可以控制方法的调用:
定义
代理模式(Proxy Pattern):为另一个对象提供一个替身或占位符以控制对这个对象的访问。
类图:
使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。
代理模式和装饰者模式的区别:代理是控制对象的访问,装饰者是为对象增加行为,代理有时会在内部实例化对象,而装饰者不会。