不得不说的结构型模式-代理模式

山景BP10_128DBG开发板ADC_Key驱动 最近在学习山景BP10_128DBG开发板,想使用开发板上的按键。看了看原理图和之前用过的按键好像有点不一样。常见的按键都是判断IO口是否被拉低或拉高来判断按键是否被按下。山景BP10_128DBG开发板上的按键是ADC按键,每个按键按下之后ADC的采样值是不同的,通过ADC采样回来的值进而判断哪个按键按下。这种方式核心思想就是用一个ADC通道来节约IO口,对于IO紧张的芯片是一个不错的解决思路。 阅读详情

目录

代理模式:

下面是一个简单的C++代码案例

下面是面试中可能遇到的问题:


代理模式:

代理模式是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。代理对象充当原始对象的中介,通过拦截对原始对象的访问来提供额外的功能或限制访问。

在代理模式中,通常有三个角色:

  • 抽象主题(Subject):定义了代理对象和原始对象的公共接口,是代理对象和原始对象的公共父类或接口。
  • 真实主题(RealSubject):定义了代理对象所代表的真实对象,是代理对象所包装的对象。
  • 代理(Proxy):定义了代理对象,并持有一个指向真实主题对象的引用,同时实现了与抽象主题相同的接口。

代理对象通常在访问原始对象之前和之后执行额外的处理,如记录日志、控制访问权限、缓存数据等。代理对象还可以通过控制对原始对象的访问来实现一些特殊的功能,如延迟加载、数据过滤等。

 

下面是一个简单的C++代码案例

 以下是一个简单的C++代理模式代码示例,假设我们有一个接口类 Subject 和一个实现类 RealSubject,我们可以通过代理类 Proxy 来访问 RealSubject 对象,并实现额外的功能。

#include <iostream>
#include <string>

using namespace std;

// 抽象主题
class Subject {
public:
    virtual void request() = 0;
};

// 真实主题
class RealSubject : public Subject {
public:
    void request() override {
        cout << "RealSubject: handling request." << endl;
    }
};

// 代理
class Proxy : public Subject {
private:
    RealSubject* realSubject_;

    void checkAccess() const {
        cout << "Proxy: checking access prior to request." << endl;
    }

    void logAccess() const {
        cout << "Proxy: logging request." << endl;
    }

public:
    Proxy(RealSubject* realSubject) : realSubject_(realSubject) {}

    void request() override {
        checkAccess();
        realSubject_->request();
        logAccess();
    }
};

// 客户端代码
int main() {
    RealSubject* realSubject = new RealSubject();
    Proxy* proxy = new Proxy(realSubject);

    proxy->request();

    delete proxy;
    delete realSubject;

    return 0;
}

在上面的代码中,RealSubject 类表示真实的主题,实现了抽象主题 Subject 的接口。Proxy 类表示代理对象,它也实现了抽象主题 Subject 的接口,并持有一个指向真实主题对象的引用。在 Proxy 类中,我们可以实现一些额外的功能,如控制访问权限、记录日志等。

在客户端代码中,我们创建了一个 RealSubject 对象和一个 Proxy 对象,并通过调用 Proxy 对象的 request() 方法来访问 RealSubject。

在上述代码中,Proxy 类作为 RealSubject 的代理对象,通过实现 request() 方法来代理 RealSubject 的 request() 方法。在 request() 方法中,Proxy 对象会先进行一些额外的处理,如检查访问权限和记录日志,然后再调用 RealSubject 对象的 request() 方法,最后再进行一些额外的处理。

当客户端代码调用 Proxy 对象的 request() 方法时,实际上是通过代理对象来访问真实主题对象的 request() 方法。这种方式可以让我们控制对真实主题对象的访问,从而实现一些特殊的功能,如权限控制、数据过滤等。

下面是面试中可能遇到的问题:

  1. 1什么是代理模式?它的主要作用是什么?

答:代理模式是一种结构型设计模式,用于为另一个对象提供一个替代品或占位符,以控制对该对象的访问。代理对象充当原始对象的中介,通过拦截对原始对象的访问来提供额外的功能或限制访问。代理模式的主要作用是增强对象的功能,保护对象的访问,以及实现延迟加载等功能。

  1. 2代理模式有哪些常见的应用场景?

答:代理模式在很多应用中都有广泛的应用,其中一些常见的应用场景包括:

  • 远程代理:将远程对象封装在代理对象中,使得客户端可以通过网络访问远程对象。
  • 虚拟代理:用于延迟加载,当对象的创建成本很高时,可以使用虚拟代理在需要时才创建对象。
  • 安全代理:控制对原始对象的访问,限制客户端的访问权限。
  • 智能代理:提供额外的功能,如缓存、日志、事务管理等。
  1. 3代理模式和适配器模式有何区别?

答:代理模式和适配器模式都是结构型设计模式,但它们的主要目的不同。代理模式是为了增强对象的功能,保护对象的访问,以及实现延迟加载等功能,而适配器模式是为了将一个接口转换为另一个接口,以便让不兼容的类能够合作工作。在代理模式中,代理对象和原始对象通常具有相同的接口,而在适配器模式中,适配器对象和被适配对象通常具有不同的接口。

此外,在代理模式中,代理对象通常可以控制对原始对象的访问,可以拦截和过滤一些方法调用,而在适配器模式中,适配器对象主要是为了兼容不同的接口而存在,不涉及控制访问和拦截调用等功能。

  1. 4代理模式有哪些缺点?

答:代理模式虽然可以提供额外的功能和保护对象的访问,但同时也会带来一些缺点,其中一些常见的缺点包括:

  • 代理模式会增加系统的复杂性,引入了更多的对象和间接层,增加了代码的维护难度。
  • 代理模式可能会降低系统的性能,由于代理对象需要进行额外的处理和转发,因此会产生额外的开销和延迟。
  • 代理模式可能会引入新的安全问题,由于代理对象可以控制对原始对象的访问,因此需要谨慎处理代理对象的安全性和可信度。

总的来说,代理模式是一种非常常用的设计模式,可以在不改变原始对象的情况下对其进行访问控制、增加额外的功能等。在实际的软件开发中,代理模式也被广泛应用,如数据库连接池、远程代理等场景中都可以使用代理模式来实现。

YOLOv11改进 | Conv/卷积篇 | 利用Hype-YOLO提出MANet增强YOLOv11特征提取能力 本文给大家带来的最新改进机制是由Hype-YOLO提出的MANet结构,其是一种C3、C2f、C3k2的升级版,用于增强特征提取能力。MANet可以理解为C2f的升级版,其整合了DSConv和C2f结构,这些模块的组合使得信息流动更加丰富,有助于在训练过程中提高梯度流动,从而增加基础特征的语义深度。官方发布的数据中HypeYOLO的精度是高于YOLOv11的,本文内容包含MAnet替换C3k2的教程以及原理介绍。欢迎大家订阅我的专栏一起学习YOLO,购买专栏读者联系读者入群获取进阶项目文件! 阅读详情

相关推荐

Synology File Station 官方 API 指南总结(中文版)

本文总结了Synology File Station官方API指南的核心内容,详细介绍了如何通过HTTP/HTTPS请求与DSM系统交互实现文件管理功能。主要内容包括: 基础API操作流程:从获取API信息、登录认证到执行请求和登出的完整工作流 请求构造与响应解析:JSON格式的请求参数处理和响应结果分析 关键API功能分类: 文件信息获取(List/Info) 文件搜索(Search) 收藏夹管理(Favorite) 缩略图生成(Thumb) 目录大小计算(DirSize) 文件上传(Upload)等 错

weixin_46001686的博客 2454

结构型模型之-代理模式(proxyPattern)

结构型模型之-代理模式(proxyPattern) 参考网址:https://www.runoob.com/design-pattern/proxy-pattern.html 1 代理模式简介 代理模式主要是用中间层控制原生对象的访问 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 2 代理模式图解 3 代理模式简单实现 3.1 代码组成类 Image ProxyImage RealImage TestProxy 3.2 具体代码 Image package com.sh

shufangreal的博客 331

手把手教你用Wireshark抓包分析Profinet非周期通信(附实战案例)

本文详细解析了PROFINET非周期通信(RTA)的技术原理与实战应用,通过Wireshark抓包分析,揭示从PLC请求到驱动器响应的完整对话过程。涵盖实验环境搭建、关键配置步骤、典型参数访问流程及故障诊断案例,帮助工程师深入理解并优化工业网络通信性能。

Black的专栏 1049

结构型模式之代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 介绍 代理主要由三部分组成: 协议: 用来指定代理双方可以做什么,必须做什么 代理: 根据指定的协议,完成委托方需要实现的功能 委托: 根据指定的协议,指定代理去完成什么功能 Protocol-协议的概念 从上图中可以看出三者之间的关系,在实际应用中通过协议来规定代理双方的行为,协议...

weixin_30426957的博客 167

TDSQL-单机安装

根据腾讯云官方要求,TDSQL安装至少需要三台机器。本人想要学习TDSQL但是没有足够的机器资源,经过仔细分析研究TDSQL安装过程,尝试发现单台机器也可以成功安装TDSQL,现将本人单台机器安装TDSQL的过程以及安装过程中遇到的问题在此分享。具体安装过程可参考腾讯官方文档,本文仅分享与官方文档不一致的步骤。

u012607648的博客 6806

从零开始写一个RTSP服务器(一)RTSP协议讲解

从零开始写一个RTSP服务器系列 从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解 从零开始写一个RTSP服务器(二)RTP传输H.264(待写) 从零开始写一个RTSP服务器(三)一个传输H.264的RTSP服务器(待写) 从零开始写一个RTSP服务器(四)RTP传输AAC(待写) 从零开始写一个RTSP服务器(五)一个传输AAC的RTSP服务器(待写) 从零开始写一个RTSP服务器(...

JT同学的博客 7万+

09.结构型模式-代理模式

代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

RubyWinner的博客 595

商店销售预测(回归&随机森林)

通过准备线性回归的数据,我们发现了一些有趣的见解,包括周末的销售增长,公共部门支付工资时的销售增长,以及11月和12月的销售增长。如果我们选择包括这些,我们可能会得到更好的结果,但在这个时候,我们不会用它来做任何预测,而是将转向另一种可能给我们更好的结果的技术。在Kaggle竞赛中,要求我们应用时间序列预测,根据厄瓜多尔大型杂货零售商Corporación Favorita的数据预测商店销售情况,建立一个模型,准确地预测在不同商店销售的商品的单位销量。在快速查看我们的训练数据集之后,我们可以看到有很多零。

qq_45791012的博客 4749

【结构型模式】代理模式

参考《Easy 搞定 Golang 设计模式》,学习结构型模式当中的代理模式。

YGGP的博客 796

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 302

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1696

结构型模式(代理模式)

代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 介绍 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操...

Again yy 295

Windows11 - Ubuntu 双系统及 ROS、ROS2 安装

在本教程中,我们将使用 Ubuntu 20.04 版本,该版本使用了新的 Ubuntu 桌面安装程序,该程序将包含在今后发布的所有 Ubuntu 版本中。如果你选择了这个选项,你会看到一个简单的界面,允许你选择要安装Ubuntu的硬盘,并通过滑块来决定你希望Ubuntu使用的磁盘空间大小。如果你的电脑有多个硬盘驱动器,那么只要它们各自有自己的驱动器,这个选项就能让你在安装 Ubuntu 的同时安装现有的操作系统。在此屏幕上,系统会提示您输入您的姓名和您的计算机名称,以显示在网络上。

机器人控制与仿真应用 4507

结构型模式 - 代理模式

结构型模式 - 代理模式

qq_43350524的博客 892

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

设计模式-05-代理模式-结构型模式

我们学习了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。其中,单例模式用来创建全局唯一的对象。工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的。我们现在学习另外一种类型的设计模式:结构型模式。

helloworld_9的博客 804

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

设计模式-结构型模式:代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,其目的是在不改变原有代码的情况下,为其他对象提供一个代理,以控制对原有对象的访问。

逐梦苍穹的博客 779

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

结构型模式—代理模式

结构型模式—代理模式

夏日漱石的博客 496

代理模式(委托模式)— 结构型

结构型简介 结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。 代理模式 代理模式又分为:静态代理和动态代理 律师这个职业大家应该都了解;就是代理打官司;下面以律师代理诉讼为例介绍代理模式 静态代理 静态代理的特点就是代理和被代理都要实现或者继承同一个接口或抽象类; 诉讼接口类 public interface ILawsuit { //提交申请

ezconn的博客 1059

【设计模式】结构型模式——代理模式

设计模式——代理模式总结

这里是Mae。 255

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

JDK动态代理和CGLIB动态代理是Java中实现动态代理的两种常用机制,虽然它们都可以为目标对象创建代理对象并拦截方法调用,但它们的工作原理和使用场景有所不同。

qq_36038282的博客 2521

结构型设计模式之代理模式

代理模式是一种结构型设计模式,它通过创建一个代理对象来控制对原始对象的访问。在C#中,代理模式可以通过静态代理(基于接口实现)或动态代理(使用RealProxy或DispatchProxy类)来实现。主要应用场景包括远程调用、访问控制、延迟加载和性能优化等。代理模式的核心是提供一个间接层,在不改变原始对象的情况下增加额外功能,如权限检查、缓存、日志记录等。

冰茶的博客 1354

【设计模式】结构型模式(二):代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个代理对象来控制对某个对象的访问。代理对象可以执行一些额外的操作,如 权限检查、日志记录、延迟初始化 等,然后再将请求转发给实际的对象。

Data · Model · Agent · Repeat 1283

结构型设计模式:看了它,代理模式其实也没那么难

摘要:代理模式是一种结构型设计模式,通过引入代理对象间接访问目标对象,控制或扩展其功能。代理模式包含三个角色:抽象主题类定义接口,代理类控制访问并扩展功能,真实主题类实现具体业务。实现方式分为静态代理(需实现相同接口,冗余但易扩展)和动态代理(运行时生成,灵活高效)。JDK动态代理利用Proxy和InvocationHandler动态生成代理类字节码,相比静态代理更易维护。该模式适用于远程访问、延迟加载、权限控制等场景,是解耦客户端与目标对象的重要设计模式。

weixin_47088026的博客 1072

【设计模式】【结构型模式】代理模式(Proxy)

代理模式(Proxy Pattern)是一种结构型设计模式,允许你提供一个代理对象来控制对另一个对象的访问。代理对象在客户端和目标对象之间起到中介作用,可以在不改变目标对象的情况下增加额外的功能或控制访问。职责清晰代理对象负责处理与核心业务无关的逻辑(如权限检查、日志记录、延迟加载等),而真实对象只需关注核心业务逻辑。符合单一职责原则。增强功能在不修改真实对象的情况下,通过代理对象增强功能(如事务管理、缓存、延迟加载等)。解耦。

flzjkl的博客 1190

结构型模式7.代理模式

代理模式是一种结构型设计模式,它提供了一个代理对象来控制对另一个对象的访问。通过代理对象,客户可以间接访问目标对象。代理对象通常用来在访问目标对象时提供附加功能,比如延迟加载、访问控制、日志记录等。

m0_61891910的博客 1092

结构型模式1——代理模式

结构型模式 这一类设计模式不关注对象的产生,关注的是类和对象的组合后功能的使用,是否符合场景的需求。 代理模式(Proxy Pattern) 代理模式是一种对象结构型模式。在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务。 模型化思想: 客户 —— 助理(Proxy)—— 老板 代理模式体现的就是: 对老板访问权限的一些控制,并不是所有的客户都可以访问老板,地位身份不够的客户就会被助理阻挡从而访问不到老板。 代

qq_44824574的博客 217
上一篇: 不得不说的结构型模式-享元模式
下一篇: 不得不说的行为型模式-责任链模式
五百五。
博客等级 码龄7年 249粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值