当前位置: 首页 > news >正文

设计模式之代理设计模式

  • 代理设计模式(Proxy Pattern)

    • 为其他对象提供一种代理以控制对这个对象的访问,属于结构型模式
    • 客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象
  • 角色

    • Subject:对象接口,真实对象和代理对象都要实现的一个抽象接口
    • Proxy:包含了对真实对象的引用,从而可以随意的操作真实对象的方法
    • RealProject:真实对象
  • 代码示例:以卖手机为例子

    /**
     * 抽取公共的方法
     */
    interface DigitalSell {
        void sell();
    }
    
    /**
     * 真实对象
     */
    class DigitalSellReal implements DigitalSell {
        @Override
        public void sell() {
            System.out.println("销售小米手机");
        }
    }
    
    /**
     * 代理对象,增加了功能
     */
    class DigitalSellProxy implements DigitalSell {
    
        private DigitalSell realObj = new DigitalSellReal();
    
        @Override
        public void sell() {
            System.out.println("增强功能A");
            realObj.sell();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            new DigitalSellProxy().sell();
        }
    }
    
  • 优点

    • 可以在访问一个类时做一些控制, 或增加功能
    • 操作代理类无需修改原本的源代码,符合开闭原则,系统具有较好的灵活性和可扩展性
  • 缺点

    • 增加系统复杂度和调用链路
  • 有静态代理和动态代理两种

    • 动态代理也有多种方式,cglib、jdk
  • 和装饰器模式的区别

    • 代理模式主要是两个功能
      • 保护目标对象
      • 增强目标对象,和装饰模式类似
http://www.dtcms.com/a/39809.html

相关文章:

  • nodejs用ws模块反向代理socks5数据,即用ws写服务端和客户端及加密
  • Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
  • 2.26 notes on cxl
  • AI工具库:技术爱好者装备新势能
  • debian 12安装 postgresql 17
  • Idea java项目结构介绍
  • 使用插件 `vue2-water-marker`添加全局水印
  • 拐弯的时间线
  • 通过返回的key值匹配字典中的value值
  • C++ Primer Plus第八章课后习题总结
  • win11系统通过WSL安装ubuntu
  • 模电学习笔记
  • 服务端配置TCP探活,超出探活时间后的行为?
  • 7.grafana的内存和CPU同时在一个表中的调整
  • 汽车悬架系统技术演进:从被动到全主动的革新之路(主动悬架类型对比)
  • 【单片机】MSP430MSP432入门
  • 大白话Vuex 核心概念(state、mutations、actions)的使用案例与原理
  • vue项目中动态添加类名样式不生效问题
  • 2025-02-26 学习记录--C/C++-C语言 整数格式说明符
  • 简单介绍JVM
  • Flutter系列教程之(6)——Tab导航与ListView使用
  • Lua的table类型的增删改查操作
  • http 协议和 https 协议的区别是什么?
  • 【1分钟学会万相文生视频】windows环境4080显卡部署Wan2.1-T2V-1.3B,亲手实操
  • 【STL】7.STL常用算法(1)
  • miqiu的分布式锁(二):实战——用JMeter验证JVM锁能否解决MySQL超卖问题
  • element-ui的组件使用
  • 每日一题——字母异位词分组
  • 2024 年出现的 11 大数据收集趋势
  • spring boot 连接FTP实现文件上传