代理模式(ProxyPattern)

devtools/2024/9/20 11:32:50/ 标签: 代理模式, 设计模式

文章目录

1.代理模式定义

代理对象控制着对原对象得访问,并允许将请求提交给原对象前后进行一些处理
在这里插入图片描述
信用卡是银行账户的代理, 银行账户则是一大捆现金的代理。 它们都实现了同样的接口, 均可用于进行支付。 消费者会非常满意, 因为不必随身携带大量现金; 商店老板同样会十分高兴, 因为交易收入能以电子化的方式进入商店的银行账户中, 无需担心存款时出现现金丢失或被抢劫的情况。

2.UML类图

在这里插入图片描述
抽象服务接口(Service Interface): 声明了真实服务和代理的公共接口,这样一来在使用真实服务的任何地方都可以使用代理。
代理(Proxy): 代理内部含有对真实服务的引用,从而可以操作真实服务对象;代理服务负责在需要的时候创建真实服务对象;代理服务通常在将客户端调用传递到真实服务之前或之后,都要执行一些其他的操作,而不是单纯地将调用传递给真实服务对象。
真实服务(Server): 实现了抽象服务接口的真实服务

3.实现代码

抽象服务接口:

public interface IServer
{void Request();
}

真实服务:

public class RealServer : IServer
{public void Request(){Console.WriteLine("RealServer: Handling request.");}
}

代理:

public class Proxy : IServer
{private RealServer _realServer;public Proxy(RealServer realSubject){_realServer = realSubject;}public void Request(){CheckAccess();_realServer.Request();LogAccess();}private bool CheckAccess(){// Some real checks should go here.Console.WriteLine("Proxy: Checking access prior to firing a real request.");return true;}private void LogAccess(){Console.WriteLine("Proxy: Logging the time of request.");}
}

使用:

RealServer realServer = new RealServer();
Proxy proxy = new Proxy(realServer);
proxy.Request();

Proxy: Checking access prior to firing a real request.
RealServer: Handling request.
Proxy: Logging the time of request.


http://www.ppmy.cn/devtools/95241.html

相关文章

Linux (Ubuntu) conda:未找到命令报错处理

检查安装路径: 确认Anaconda或Miniconda是否已经安装。通常,安装路径在用户主目录下,例如 ~/anaconda3 或 ~/miniconda3。 添加路径到环境变量: 如果知道Anaconda或Miniconda的安装路径,可以手动将路径添加到环境变量…

节流函数:JavaScript性能优化的利器

标题:节流函数:JavaScript性能优化的利器 在JavaScript开发中,我们经常会遇到一些频繁触发的操作,如窗口调整大小、滚动条滚动等。这些操作如果处理不当,可能会导致性能问题,甚至引起浏览器的卡顿。节流&a…

Electron 的clipboard,怎么使用

在Electron中,clipboard模块提供了用于操作系统剪贴板的方法,允许你以编程方式读取和写入剪贴板中的数据。以下是如何在Electron中使用clipboard模块的基本步骤和示例: 引入clipboard模块 首先,你需要在你的Electron主进程或渲染进程中引入clipboard模块。通常,在Electr…

传感器灯光与避障系统的详细作用!

传感器灯光 视觉指示:传感器灯光为无人机提供了直观的视觉指示,帮助飞行员或地面操作人员清晰地识别无人机的飞行状态、方向和位置。 通信与警示:通过特定的灯光颜色和闪烁模式,传感器灯光能够传达无人机的特定状态或警告信息&a…

阅文集团:摇不动的IP摇钱树

把IP当成摇钱树,要做“东方迪士尼” 今天我们聊——阅文集团 《热辣滚烫》《庆余年2》《与凤行》和《玫瑰的故事》很熟悉吧?影视“四连爆”, 阅文集团交出一份亮眼半年报,时隔两年,重启增长。 跟IP相关业务对收入贡献…

提升前端性能的JavaScript技巧(下)

我们继续深入讨论提升前端性能的JavaScript技巧,这些技巧涉及更高级的策略和最佳实践。 五、利用现代浏览器特性 1. Web Workers Web Workers 允许你运行一个与主JavaScript执行线程分离的后台脚本。这对于执行耗时操作(如大规模数据处理、复杂的计算…

周记-2024年第32周8.5~8.11:北京出差,拒绝羞怯

现在是周日晚上23:21,我开始写周记。0:05结束,共花费44分钟。 上周计划 重启早起名人名言朗读冥想。完全没做,本周在北京出差,作息极其不规律。和领导沟通更加自信一些,记住,有问题就给领导提…

深度解析油烟净化器安装除味设备的重要性与空气品质提升

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在餐饮业的油烟治理中,油烟净化器已经成为标准配置,但不少人对是否需要安装除味设备仍存疑。事实上&am…

leetcode + 后端接入需求

上午 看了一会儿leetcode 刷完了字符串 中午 最近因为和小熊说话,心情好,上班也有动力了 下午 接入对话鸭的后台管理需求,和后端对了一下实现思路,可能是这次的需求不着急,我有大量的时间理解项目和梳理思路&…

深入探索 Go 1.18 的 debug/buildinfo:构建信息的获取与应用

标题:深入探索 Go 1.18 的 debug/buildinfo:构建信息的获取与应用 引言 Go 语言自 1.18 版本起,引入了对构建信息的标准化处理,这一特性极大地简化了获取程序构建信息的过程。debug/buildinfo 包提供了访问 Go 二进制文件中嵌入…

双指针运算

核心思想&#xff1a;将朴素算法优化到O(n) 应用实例 1.将一个字符串分割成单词 //将一个字符串分割成单词 #include<iostream> #include<string.h> using namespace std;int main() {char str[1000];gets(str);int nstrlen(str);//trlen函数需要引入头文件#inc…

VBA语言専攻T3学员领取资料通知0817

T3学员领取资料通知0817 各位学员∶本周MF系列VBA技术资料增加681-690讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月16日晚上19:00-8月17日中午12:00。本次增加内容&#xff1a; MF691:按所选范围对行进行分组显示 MF692:查找所给范围内的重复项 MF693:文本框Text…

docker配置国内镜像加速

docker配置国内镜像加速 由于国内使用docker拉取镜像时&#xff0c;会经常出现连接超时的网络问题&#xff0c;所以配置Docker 加速来使用国内 的镜像加速服务&#xff0c;以提高拉取 Docker 镜像的速度。 1、备份docker配置文件 cp /etc/docker/daemon.json /etc/docker/da…

SAK-TC277TP-64F200N DC:32位RAM微控制器、常用于消费者应用

描述&#xff1a; SAK-TC277TP-64F200N DC属于第一代Aurix TC27xT产品。其创新多核心架构基于多达三个独立32位TriCore CPU&#xff0c;专为满足极高的安全标准&#xff0c;同时大幅提高性能而设计。TC27xT系列产品配备200 MHz TriCore、5V 或3.3V 单电压供电和强大的通用定时器…

贪吃蛇(C语言详解)

贪吃蛇游戏运行画面-CSDN直播 目录 贪吃蛇游戏运行画面-CSDN直播 1. 实验目标 2. Win32 API介绍 2.1 Win32 API 2.2 控制台程序&#xff08;Console&#xff09; 2.3 控制台屏幕上的坐标COORD 2.4 GetStdHandle 2.5 GetConsoleCursorlnfo 2.5.1 CONSOLE_CURSOR_INFO …

嵌入式软件--模电基础 DAY 2

强电和弱电&#xff0c;简单一点是以电死人为标准的&#xff0c;交流电36伏特以下&#xff0c;直流电24V以下&#xff0c;为安全电压&#xff0c;是为弱电&#xff0c;反则强电。 市电进入家庭&#xff0c;连接你的电脑&#xff0c;220V的电压为什么没有让你感到危险&#xff…

一个使用Python和`scikit-learn`库实现KMeans聚类算法的简单示例

一个使用Python和scikit-learn库实现KMeans聚类算法的简单示例。首先&#xff0c;请确保您已经安装了scikit-learn库。如果没有安装&#xff0c;可以通过pip安装它&#xff1a; pip install scikit-learn下面是一个简单的例子&#xff0c;展示如何使用scikit-learn中的KMeans进…

Windows10配置FFmpeg和使用FFmpeg截取视频流视频

第一部分&#xff1a;Windows10配置FFmpeg 简介&#xff1a;FFmpeg是一个功能强大的多媒体处理工具(用于录制、转换和播放音频和视频)。可以进行转换、剪辑、拼接、过滤等操作。 1、下载FFmpeg工具&#xff08;分Windows和Linux其他&#xff09; Download FFmpeghttps://ffm…

Java中的全局异常处理器 -- GlobalExceptionHandler

开发记录&#xff1a;全局异常处理器笔记 import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.MyBatisSystemException; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.RedisConnectionFailureException; im…

透明加密技术

透明加密技术&#xff0c;也被称为透明数据加密&#xff08;Transparent Data Encryption, TDE&#xff09;&#xff0c;是一种加密方法&#xff0c;它允许数据在存储时自动加密和解密&#xff0c;而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…