编程-设计模式 12:代理模式

设计模式 12:代理模式

定义与目的
  • 定义:代理模式提供一个代理对象来控制对一个对象的访问。代理对象通常拥有与实际对象相同的接口,使得客户端代码可以透明地使用代理对象。
  • 目的:该模式的主要目的是控制对一个对象的访问,以及在访问之前或之后执行某些操作。
实现示例

假设我们有一个昂贵的图像加载操作,我们希望延迟加载直到真正需要显示时才加载图像。我们可以使用代理模式来实现这个需求。

java 复制代码
// 接口 - 图像
interface Image {
    void display();
}

// 实际主题 - 真实图像
class RealImage implements Image {
    private final String filename;

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

    private void loadFromDisk() {
        System.out.println("Loading image: " + filename);
    }

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

// 代理主题
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 实例并加载图像
        }
        realImage.display();  // 显示图像
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
    	// RealImage 创建时即加载图像,而ProxyImage不会在创建时加载图像
        Image proxyImage = new ProxyImage("image.png");

        // 在这里调用display()时,实际的图像将被加载并显示
        proxyImage.display();  // 输出: Loading image: image.png
                               //       Displaying image: image.png
    }
}
使用场景
  • 当你需要控制对一个对象的访问时。
  • 当你需要在访问一个对象前后执行某些操作时,例如缓存、权限检查、日志记录等。
  • 当创建一个对象的成本较高时,可以通过代理对象来延迟创建或共享实际对象。

代理模式通过提供一个代理对象来控制对实际对象的访问,这对于需要在访问对象前后执行额外操作的场景非常有用。

小结

代理模式是一种常用的结构型模式,它有助于控制对一个对象的访问,并在访问前后执行某些操作。这对于需要增加额外功能而又不想修改现有类的情况非常有用。

相关推荐
芝士熊爱编程2 小时前
创建型模式-单例模式
java·单例模式·设计模式
咖啡八杯4 小时前
GoF设计模式——访问者模式
设计模式·访问者模式
谢栋_6 小时前
设计模式从入门到精通之(七)责任链模式
java·设计模式·责任链模式
葬送的代码人生20 小时前
别再让 AI 瞎写代码了!Vibe Coding 三步法教你写出靠谱代码
前端·设计模式·架构
无风听海1 天前
Claude Agent Skills 的四种设计模式;从渐进式披露到最小权限
java·算法·设计模式
富贵冼中求1 天前
从单向流到双向 RPC:Agent 通信协议的范式分叉与 ACP 协议实战拆解
设计模式·架构
电子科技圈1 天前
先进封装、芯粒架构和3D集成——先进异构集成亟需兼具标准化与定制化能力的互联及总线IP解决方案
tcp/ip·设计模式·架构·软件构建·代码规范·设计规范
zjun10011 天前
C++:2.工厂模式
设计模式
触底反弹1 天前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
杨充2 天前
10.可测试性实战设计
设计模式·开源·代码规范