跳至主要內容

【设计模式】结构型-④代理模式

holic-x...大约 3 分钟设计模式设计模式

【设计模式】结构型-④代理模式

学习核心

  • 代理模式核心
    • 概念:使用代理对象(proxy object)来代替对真实对象(real object)的访问,在不修改原目标对象的基础上提供额外的功能操作,扩展目标对象的功能
    • 组成:代理对象、被代理对象
      • 主题(Subject):抽象主题(Abstract Subject)、真实主题(Real Subject)、代理主题(Proxy Subject)
        • 抽象主题:定义了真实主题和代理主题的公共接口
        • 真实主题:基础业务功能实现
        • 代理主题:在不改变原有业务代码的基础上进行扩展实现
      • 客户端(Client):通过抽象主题来操作真实主题或代理主题
  • 应用场景分析
    • 【MyBatis框架】:定义接口,通过XML配置文件或者自定义注解中的SQL语句进行CRUD操作

    • 【中间件】:例如RPC框架,在获取到jar包对接口的描述之后,中间件会在服务启动的时候生成相应的代理类,当调用接口时实际是通过代理类发出的socket信息进行调用

    • JS的【图片加载】场景、图片二次处理场景

      • 缓存代理:一些网络图片交互场景下,先将图片预先加载到本地缓存中,当要进行访问的时候直接访问本地缓存信息,而不需重复从服务器中拉取;
      • 虚拟代理:例如一些图片加载比较大的情况下,先用loading图片进行占位然后异步加载图片信息,待图片信息加载完成之后再刷新图片数据
      • 图片二次处理场景:通过代理对图片进行二次处理(水印渲染、加解密、图片权限访问控制等)
    • 【AOP】场景:所谓AOP面向切面编程,其底层本质也是通过代理方式实现对功能的横向扩展

学习资料

概念说明

​ 代理模式:使用代理对象(proxy object)来代替对真实对象(real object)的访问,在不修改原目标对象的基础上提供额外的功能操作,扩展目标对象的功能。代理模式可以应用于不同的场景(如网络请求、图片加载、数据操作等)

场景案例

1.图片加载场景

​ 目标:设定一个代理,控制对真实图片的访问(例如开关图片访问权限、图片二次处理等)

核心:定义Image接口,分别定义RealImage、ProxyImage,通过Client客户端调用抽象主题进行操作

代码实现说明

  • 主题定义(抽象主题接口、真实主题、代理主题)
/**
 * 抽象主题接口
 * 定义真实主题和代理主题的公共接口
 */
public interface Image {
    public void display();
}

/**
 * 真实主题:实现抽象主题接口
 */
public class RealImage implements Image {
    @Override
    public void display() {
        System.out.println("show real image");
    }
}

/**
 * 代理主题:实现抽象主题接口
 * 目的:控制对真实图片的访问,例如水印渲染、加密处理等
 */
public class ProxyImage implements Image {

    // 定义被代理对象
    private RealImage realImage = new RealImage();

    @Override
    public void display() {
        realImage.display();
        System.out.println("show proxy image: 输出水印渲染后的图片信息");
    }
}
  • 客户端定义(客户端调用)
/**
 * 客户端访问
 */
public class Client {

    public static void main(String[] args) {
        Image proxy = new ProxyImage();
        proxy.display();
    }

}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3