代理模式
一、介绍
代理模式是一种常用的设计模式,它允许通过代理对象来控制对其它对象的访问。在软件开发中,代理模式通常被用来在访问对象时增加一些额外的控制,或者隐藏对象的实际实现细节。
代理模式的核心思想是引入一个代理对象,这个代理对象与原始对象具有相同的接口,客户端可以通过代理对象来访问原始对象。代理对象在调用原始对象的方法之前或之后可以执行一些额外的操作,例如权限检查、缓存、延迟加载等。
二、静态代理与动态代理示例
1.静态代理
在编译时已经确定代理对象与真实对象的关系,代理对象通常直接实现了与真实对象相同的接口或者继承了真实对象的类。
在这个示例中,我们定义了一个 Image 接口,然后有一个真实的图片类 RealImage 实现了该接口,它负责加载并显示图片。然后我们创建了一个代理类 ImageProxy,它也实现了 Image 接口,并且在调用 display() 方法时,会先检查真实图片对象是否已经加载,如果没有则加载,然后显示图片。
// 定义一个接口
interface Image {
void display();
}
// 具体类
class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk(filename);
}
@Override
public void display() {
System.out.println("Displaying " + filename);
}
private void loadFromDisk(String filename) {
System.out.println("Loading " + filename);
}
}
// 代理类
class ImageProxy implements