代理模式(Proxy): 为其他对象提供一种代理以控制对这个对象的访问
使用场景:
- 远程代理:为一个对象在不同的地址空间提供局部代表,比如访问远程机器上的对象
- 虚拟代理:根据需要创建开销很大的对象,通过他来存放实例化需要很长时间的真是对象。这样这个对象只需要实例化一次
- 安全代理:安全代理,可以控制真是对象访问时的权限
应用举例: 1、比如买火车票可以去代售点买,而不用去火车站,代售点就可以看作是一个代理 2、比如windows里的快捷方式也可以理解为一种代理模式,可以去软件安装目录里点击打开,也可以直接点击快捷方式打开,快捷方式就是一个代理类
类图:
代码例子:通过代理类从远程磁盘读取一张图片,第一次需要从磁盘进行加载,第二次则直接进行展示
public interface Image {
void display();
}
//实际被访问的对象
public class RealImage implements Image {
public RealImage() {
System.out.println("loading image from disk...");
}
@Override
public void display() {
System.out.println("image showing...");
}
}
//代理类,持有一个ProxyImage对象,然后外部通过proxy间接访问对象
public class ProxyImage implements Image {
private RealImage realImage;
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage();
}
realImage.display();
}
}
public class Client {
public static void main(String[] args) {
ProxyImage proxyImage = new ProxyImage();
proxyImage.display(); //第一次需要从磁盘加载
proxyImage.display(); //第二次不用
}
}