代理模式为其他对象提供一种代理以控制对这个对象的访问,我们创建具有现有对象的对象,方便给外界提供功能接口。代理模式解决了直接访问对象时带来的问题,比如需要访问的对象在远程的机器上。
代理模式优点是职责清晰、扩展性高、智能化;缺点是在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,实现代理模式需要额外的工作。
代理模式主要使用场景包括远程代理、虚拟代理、Copy-On-Write处理、保护代理、缓存代理、防火墙代理、同步化代理。
- 创建一个Image接口及其实现类;
public interface Image {
//显示图片
void display();
}
public class RealImage implements Image {
private String filename;
public RealImage(String filename) {
this.filename = filename;
loadFromDisk(filename);
}
private void loadFromDisk(String filename) {
System.out.println("Load " + filename + " from Disk");
}
@Override
public void display() {
System.out.println("Display:" + filename);
}
}
- 创建代理类ImageProxy;
public class ImageProxy implements Image {
private Image image;
private String filename;
ImageProxy(String filename) {
this.filename = filename;
}
@Override
public void display() {
//代理类中持有真实类的引用
if(image == null) {
image = new RealImage(filename);
}
image.display();
}
}
- 创建启动类,测试结果。
public class ImageInstance {
public static void main(String[] args) {
Image image = new ImageProxy("Hello.txt");
image.display();
}
}
本文介绍了代理模式的概念,它用于提供对目标对象的访问控制。通过代理对象,可以实现远程访问、虚拟代理、缓存等功能,同时保持职责清晰和扩展性。代理模式在处理速度上可能稍慢,但能解决跨网络访问等问题。示例中展示了如何创建Image接口及其实现类RealImage,以及使用代理类ImageProxy来控制RealImage的显示。

2300

被折叠的 条评论
为什么被折叠?



