【Java】23种设计模式——12.代理模式
定义
代理模式(Proxy Pattern)是一种结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。
角色
- 抽象主题(Subject):定义真实主题和代理主题的共同接口
- 真实主题(RealSubject):实现实际业务逻辑的类
- 代理(Proxy):持有对真实主题的引用,控制对真实主题的访问
应用场景
- 远程代理(Remote Proxy) 为远程对象提供本地代表
- 虚拟代理(Virtual Proxy) 延迟场景开销大的对象
- 保护代理(Protection Proxy) 控制对原始对象的访问权限
- 职能引用(Smart Reference) 在访问对象时执行额外操作
使用
代理图片展示。
-
抽象主题(Subject) 抽象图片方法
/** * 抽象主题 : 图片 * @Author:lyj * @Date:2025/5/19 16:53 */ public interface Image { /** * 显示图片 */ public void display(); } -
真实主题(RealSubject) 具体图片方法
/** * 具体主题 : 真实图片 * @Author:lyj * @Date:2025/5/19 16:55 */ public class RealImage implements Image{ private String fileName; // 文件名称 public RealImage(String fileName){ this.fileName = fileName; loadFromDisk(fileName); } /** * 从磁盘加载图片 * @param fileName 文件名 */ private void loadFromDisk(String fileName) { System.out.println("加载图片:" + fileName); } @Override public void display() { System.out.println("显示图片:" + fileName); } } -
代理(Proxy) 代理具体图片
/**
* 代理 : 代理图片
* @Author:lyj
* @Date:2025/5/19 16:57
*/
public class ProxyImage implements Image {
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName)
{
this.fileName = fileName;
}
/**
* 展示图片
*/
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
客户端测试
Image image = new ProxyImage("test.jpg");
// 图片从磁盘加载
image.display();
System.out.println("---");
// 图片不从磁盘加载
image.display();
运行结果:

有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

浙公网安备 33010602011771号