代理模式
一、定义
为其他对象提供一个代理以控制对这个对象的访问。
二、类图表示
三、实现
1、Subject与RealSubject
package pattern.structual.proxy;
public interface Subject {
public void request();
}
package pattern.structual.proxy;
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("RealSubject request()...");
}
}
2、Proxy
package pattern.structual.proxy;
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if(realSubject == null){
realSubject = new RealSubject();
}
realSubject.request();
}
}
四、使用
package pattern.structual.proxy;
public class Client {
public static void main(String[] args) {
Subject proxy = new Proxy();
proxy.request();
}
}
- 程序输出:
RealSubject request()...
五、适用场合
1、虚拟和远程代理
当客户端不能直接操作到某个对象,但又必须和那个对象互动。
-
虚拟代理(Virtual Proxy):如果那个对象的创建开销很大时(例如:文档中有个很大的图片,而文档需要快速打开,此时该图片需要用Proxy来代替真正的图片)
-
远程代理(Remote Proxy):如果那个对象在Internet的某个远程服务器上,直接操作该对象会因为网络原因速度慢,此时可以先用Proxy对象来代替
2、授权机制
不同身份的用户对同一对象拥有不同的访问权利
- 保护代理(Protection Proxy):根据不同的访问权限控制对原始对象的访问