魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 代理模式

文章摘要: 代理模式使用总结。

简介

简要说明

  • 代理模式(Proxy Pattern)是一种结构型设计模式。
  • 代理模式为某个对象提供一个代理对象,并由代理对象控制对原对象的访问。
  • 代理对象可以在访问原对象之前或之后执行一些特定的操作,比如权限检查、缓存、延迟加载等。

主要功能

  • 控制对原始对象的访问。
  • 在不修改原始对象代码的情况下增加额外的功能。
  • 隐藏原始对象的实现细节。

注意事项

  • 代理模式可能会增加系统的复杂度,因为需要创建额外的代理类。
  • 代理可能会造成性能下降,因为增加了额外的处理开销。
  • 需要确保代理和原始对象之间的接口一致性,以保证客户端透明地使用代理。

适用场景

  • 当需要控制对某个对象的访问时。
  • 当需要为一个对象添加额外的功能,而不想修改其代码时。
  • 当需要延迟加载或缓存某个对象时。
  • 当需要为远程对象提供一个本地代理时。

Java 8

案例

// 定义一个接口,原始对象和代理对象都将实现这个接口
interface Image {
    void display();
}

// 原始对象
class RealImage implements Image {
    private String filename;

    public RealImage(String filename) {
        this.filename = filename;
        loadImageFromDisk();
    }

    private void loadImageFromDisk() {
        System.out.println("Loading " + filename);
    }

    @Override
    public void display() {
        System.out.println("Displaying " + filename);
    }
}

// 代理对象
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();
    }
}

// 客户端代码
public class ProxyPatternDemo {
    public static void main(String[] args) {
        Image image = new ProxyImage("test_image.jpg");

        // 图像将从磁盘加载
        image.display();
        System.out.println("");

        // 图像不需要从磁盘加载
        image.display();
    }
}

注释

  • 在这个例子中,Image 是一个接口,RealImage 是实现了 Image 接口的原始对象,ProxyImage 是代理对象,它也实现了 Image 接口。
  • ProxyImage 在需要时才创建 RealImage 对象,从而实现了延迟加载。
  • 客户端代码通过 ProxyImage 来间接访问 RealImage,而无需直接与 RealImage 交互。
更新时间: 2025/10/3 17:56