代理模式:控制对象访问

为其他对象提供一种代理以控制对这个对象的访问(如延迟加载、权限校验)。

代码示例:

java 复制代码
// 1. 抽象接口
interface Image {
    void display();
}

// 2. 真实对象(高开销)
class RealImage implements Image {
    private final String filename;
    
    public RealImage(String filename) {
        this.filename = filename;
        loadFromDisk(); // 模拟高成本操作
    }
    
    private void loadFromDisk() {
        System.out.println("正在加载图像: " + filename);
    }
    
    @Override
    public void display() {
        System.out.println("显示图像: " + filename);
    }
}

// 3. 代理类(控制访问)
class ProxyImage implements Image {
    private RealImage realImage;
    private final String filename;
    
    public ProxyImage(String filename) {
        this.filename = filename;
    }
    
    @Override
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(filename); // 延迟加载
        }
        realImage.display();
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        Image image = new ProxyImage("photo.jpg");
        image.display();
    }
}

**使用场景:**虚拟代理(延迟加载大文件)、保护代理(权限控制)、远程代理(网络请求封装)

**优点:**解耦客户与真实对象;增强安全性/性能

**缺点:**可能增加响应延迟;代码复杂度提高

相关推荐
码路飞3 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing3 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven975 小时前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德16 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆18 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌20 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊21 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang21 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解1 天前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端