当前位置: 首页 > 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
  • 和装饰器模式的区别

    • 代理模式主要是两个功能
      • 保护目标对象
      • 增强目标对象,和装饰模式类似

相关文章:

  • 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
  • 一家专门做衣服的网站/百度关键词seo外包
  • 如何做网站推广 求指点/最新热点新闻事件素材
  • 网站建设与维护案列/广东seo推广贵不贵
  • 微云影视自助建站系统/河南网站seo靠谱
  • 建设企业网站的需求/惠州seo建站
  • 虎门营销型网站建设/推广网站有哪些