【进阶编程】代理模式和适配模式的比较

news/2024/12/25 10:23:14 标签: 代理模式, c#, 个人开发, 系统架构

代理模式适配器模式(Adapter Pattern)都属于结构型设计模式,它们在某些方面有相似之处,都涉及到为其他对象提供间接访问和包装,但它们的核心目的是不同的。下面是对代理模式和适配器模式的详细比较:

1. 目的

  • 代理模式(Proxy Pattern)

    • 代理模式的目的是通过一个代理对象来控制对目标对象的访问。代理类通常会充当目标对象的替代者,在调用目标对象的实际方法之前或之后,执行某些附加的逻辑(如延迟加载、权限控制、日志记录等)。
    • 代理模式侧重于控制对象的访问,增加功能或优化性能,通常不改变目标对象的接口。
  • 适配器模式(Adapter Pattern)

    • 适配器模式的目的是将一个类的接口转换成客户端期望的接口,从而使不兼容的接口能够协同工作。适配器模式通常用于将一个现有类的接口转换为另一个接口,以便它们能够一起使用。
    • 适配器模式侧重于将一个类与不兼容的接口对接,使得类可以适配不同的接口。

2. 使用场景

  • 代理模式

    • 延迟加载:使用代理对象来延迟初始化目标对象,直到真正需要时才创建它。
    • 远程代理:当目标对象位于不同的地址空间时(如分布式应用),代理可以代表远程对象进行方法调用。
    • 权限控制:代理可以在访问目标对象之前进行权限验证,控制对敏感操作的访问。
    • 缓存/智能代理:例如,通过代理来缓存目标对象的计算结果,避免重复计算。
  • 适配器模式

    • 接口不兼容:当你需要将不同接口的类连接起来时(例如,第三方库的接口和当前系统的接口不兼容),可以使用适配器来将两者对接。
    • 遗留系统的集成:当一个新系统需要与一个已有的系统集成,而两者的接口不同,可以使用适配器模式来进行兼容。
    • 标准化不同接口:当多个类具有相似功能但接口不同时,适配器模式可以为这些类提供统一的接口。

3. 设计模式的实现

代理模式

代理模式通过创建一个代理类来控制对目标对象的访问。代理类与真实对象通常实现相同的接口,并可能在访问目标对象之前或之后进行额外的操作(例如,缓存、权限检查、延迟加载等)。代理类本身并不改变目标对象的行为或接口,而是对其进行包装。

代理模式的实现:

  • 代理类和真实类通常实现相同的接口或继承自相同的基类。
  • 代理对象对外暴露与真实对象相同的方法,可以在方法调用前后加入额外的逻辑。
public 

http://www.niftyadmin.cn/n/5798983.html

相关文章

微软在AI时代的战略布局和挑战

微软的CEO萨提亚纳德拉(Satya Nadella)在与投资人比尔格里(Bill Gurley)和布拉德格斯特纳(Brad Gerstner)的一场深度对话中,详细回顾了微软在AI时代的战略布局与所面临的挑战。这场对话不仅总结…

【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(一):从电梯出发的状态模式State Pattern

前言 (题外话)nav2系列教材,yolov11部署,系统迁移教程我会放到年后一起更新,最近年末手头事情多,还请大家多多谅解。回顾我们整个学习历程,我们已经学习了很多C的代码特性,也学习了很多ROS2的跨…

五十一:HPACK如何减少HTTP头部的大小?

在现代的Web通信中,HTTP是最常用的协议。然而,随着网络应用程序的复杂化,HTTP头部的大小迅速增加,尤其是在HTTP/2中,由于其多路复用特性,多个请求和响应共享同一个连接,头部大小对性能的影响变得…

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务,要求用户在60天内迁移账号,否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息: 1. 背景介绍:GitLab是一家全球知名的软件开发平台,提供代码托…

物理层知识要点

文章目录 物理层接口的四大特性通信基础编码和调制(1)数字数据编码为数字信号(2)模拟数据编码为数字信号(3)常见调制方式(3)信道的极限容量 多路复用技术数据传输方式物理层下的传输…

leetcode 05 回文字符串

leetcode 05 回文字符串 1. 描述 给你一个字符串,找到里面最长的回文字符串 2. 事例 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: …

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据,预测房价中值。 环境要求: ancondajupyter notebookpython3.10.10 虚拟环境: pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…

Springboot jar包加密加固并进行机器绑定

获取机器码,通过classfinal-fatjar-1.2.1.jar来获取机器码 命令:java -jar classfinal-fatjar-1.2.1.jar -C 对springboot打包的jar进行加密功能 java -jar classfinal-fatjar-1.2.1.jar -file lakers-ljxny-3.0.0.jar -packages com.lygmanager.laker…