【Java】23种设计模式——12.代理模式

定义

代理模式(Proxy Pattern)是一种结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。

角色

  1. 抽象主题(Subject):定义真实主题和代理主题的共同接口
  2. 真实主题(RealSubject):实现实际业务逻辑的类
  3. 代理(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();

运行结果:
image

posted @ 2025-06-20 16:34  陆陆无为而治者  阅读(11)  评论(0)    收藏  举报