【Python笔记-设计模式】代理模式

news/发布时间2024/6/16 18:28:49

一、说明

代理模式是一种结构型设计模式,提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

(一) 解决问题

控制对对象的访问,或在访问对象前增加额外的功能或控制访问

(二) 使用场景

  1. 远程代理:将对象的访问请求发送给远程服务器,以实现远程对象的访问。这在分布式系统中很常见,可以隐藏远程调用的复杂性。
  2. 虚拟代理:延迟加载对象,即在需要时才真正创建对象。这可以提高系统的性能和资源利用率。
  3. 保护代理:控制对对象的访问,只有满足特定条件的请求才能访问对象。这可以用于实现权限控制等安全功能。
  4. 缓存代理:为昂贵的操作结果提供缓存,以提高系统的性能。当请求相同的操作时,直接返回缓存的结果,避免重复计算。
  5. 智能引用代理:在对象被引用时进行一些额外的操作,例如计算对象的引用次数,当引用次数为0时自动释放对象。

二、结构

  1. 服务接口(ServiceInterface)声明了服务接口。代理必须遵循该接口才能伪装成服务对象。
  2. 服务(Service)类提供了一些实用的业务逻辑。
  3. 代理(Proxy)类包含一个指向服务对象的引用成员变量。代理完成其任务(例如延迟初始化、记录日志、访问控制和缓存等)后会将请求传递给服务对象。通常情况下,代理会对其服务对象的整个生命周期进行管理。
  4. 客户端(Client)能通过同一接口与服务或代理进行交互,所以你可在一切需要服务对象的代码中使用代理。

三、伪代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__doc__ = """
代理模式例:买演唱会门票时,找黄牛(代理人)代买门票
"""from abc import ABC, abstractmethodclass TicketSeller(ABC):"""抽象主题"""@abstractmethoddef buy_ticket(self) -> None:passclass TrainStationSeller(TicketSeller):"""真实主题"""def buy_ticket(self) -> None:print("官方票务平台出票")class TicketProxy(TicketSeller):"""代理类"""def __init__(self, train_seller: TrainStationSeller) -> None:self._train_station_seller = train_sellerdef buy_ticket(self) -> None:print("黄牛帮助购买演唱会门票")self._train_station_seller.buy_ticket()if __name__ == "__main__":"""黄牛帮助购买演唱会门票官方票务平台出票"""train_station_seller = TrainStationSeller()ticket_proxy = TicketProxy(train_station_seller)ticket_proxy.buy_ticket()

四、优缺点

优点

  • 远程调用的优化:可以将远程调用的开销和实现细节隐藏起来,客户端可以像调用本地对象一样调用远程对象,提高系统的性能和效率。
  • 保护目标对象:可以通过代理类来控制对目标对象的访问,实现权限控制、安全检查等功能,保护目标对象不被非法访问。
  • 延迟加载:可以延迟加载目标对象,只有在真正需要时才创建目标对象,节省了系统资源。

缺点

  • 增加系统复杂性:因为会会引入代理类,可能会导致代码难以理解和维护。
  • 性能损耗:在某些情况下,代理模式可能会引入额外的性能损耗,例如远程代理需要进行网络通信,可能会影响系统的响应速度。

【Python笔记】设计模式-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/LTOb/8325.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

2 月 27 日算法练习-暴力

括号序列 暴力做法&#xff0c;利用 dfs&#xff0c;能过<40%&#xff0c;need 用来找到最小需要的括号数&#xff0c;dfs中的 left 代表未匹配的左括号&#xff0c;左右括号做法相反。 #include<bits/stdc.h> using namespace std; string s; int ans,ans2,len,min_s…

matlab动力学共振颤振研究

1、内容简介 略 58-可以交流、咨询、答疑 采用四阶龙哥库塔方法求解方程组&#xff0c;方便控制碰撞的时间&#xff0c;检测到碰撞的时间&#xff0c;改变速度&#xff0c;调整位移&#xff0c;碰撞检测通过对比相对位移 2、内容说明 略 基本思路&#xff1a;采用四阶龙哥…

龙蜥 Anolis OS8.4 设置IP

1、配置文件路径 /etc/sysconfig/network-scripts/ [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]# ls ifcfg-ens32 进入配置文件路径后&#xff0c;展示。ifcfg-ens32这个不同的服务器不一样&#xff0c;本次虚拟机所对应的是ens3…

HTTP1.0,HTTP1.1,持久连接,非持久连接,TCP,UDP,三次握手和四次挥手,HTTP与HTTPS,对称加密和非对称加密,状态码

HTTP1.0和HTTP1.1的区别 HTTP1.0HTTP1.1连接方式非持久连接持久连接缓存 主要使用 header 里的 If-Modified-Since、Expires 来做为缓存判断的标准 引入了更多的缓存控制策略&#xff0c;例如 Etag、If-Unmodified-Since、If-Match、If-None-Match 等更多可供选择的缓存头来控…

一键生成PDF即刻呈现:轻松创建无忧体验

在信息爆炸的时代&#xff0c;我们每天都在与各种文件、资料打交道。无论是工作中的报告、合同&#xff0c;还是学习中的笔记、论文&#xff0c;如何高效、安全地管理这些珍贵的资料&#xff0c;成为了我们迫切的需求。幸运的是&#xff0c;随着科技的发展&#xff0c;我们不再…

机器学习笔记 占用网络简述(Occupancy Networks)

1、简述 在之前的文章中,我们深入研究了各种 3D 数据表示。我们看到了传​​统方法的缺点以及对精确捕捉 3D 对象复杂性的先进方法的需求。现在,让我们深入探讨我们表示 3D 形状的方式,占用网络。 https://skydance.blog.csdn.net/article/details/134672671https://skydan…

【小沐学QT】QT学习之OpenGL开发笔记

文章目录 1、简介2、Qt QOpenGLWidget gl函数3、Qt QOpenGLWidget qt函数4、Qt QOpenGLWindow5、Qt glut6、Qt glfw结语 1、简介 Qt提供了与OpenGL实现集成的支持&#xff0c;使开发人员有机会在更传统的用户界面的同时显示硬件加速的3D图形。 Qt有两种主要的UI开发方…

go test用法(获取单元测试覆盖率)

go test用法&#xff08;获取ut覆盖率&#xff09; 为了提升系统的稳定性&#xff0c;一般公司都会对代码的单元测试覆盖率有一定要求。下面针对golang自带的测试命令go test做讲解。 1 命令 1.1 go test ./… &#xff08;运行当前目录及所有子目录下的测试用例&#xff09; …

机器学习:SVM算法(Python)

一、核函数 kernel_func.py import numpy as npdef linear():"""线性核函数:return:"""def _linear(x_i, x_j):return np.dot(x_i, x_j)return _lineardef poly(degree3, coef01.0):"""多项式核函数:param degree: 阶次:param …

Stable Diffusion 3 发布及其重大改进

1. 引言 就在 OpenAI 发布可以生成令人瞠目的视频的 Sora 和谷歌披露支持多达 150 万个Token上下文的 Gemini 1.5 的几天后&#xff0c;Stability AI 最近展示了 Stable Diffusion 3 的预览版。 闲话少说&#xff0c;我们快来看看吧&#xff01; 2. 什么是Stable Diffusion…

使用.NET开发VSTO工具快速将PPT导出为图片

本文主要介绍如何使用.NET开发 PowerPoint VSTO 外接程序&#xff0c;并实现快速的将当前页PPT导出为图片的功能。可以帮助你了解如何使用 VSTO 开发 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的对象模型。 1. 背景 在日常的文章写作中&#xff0c;我经常使用 PPT…

Leetcoder Day26| 回溯part06:总结+三道hard题

332.重新安排行程 给定一个机票的字符串二维数组 [from, to]&#xff0c;子数组中的两个成员分别表示飞机出发和降落的机场地点&#xff0c;对该行程进行重新规划排序。所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必…

命令执行 [UUCTF 2022 新生赛]ez_rce

打开题目 得到题目源码 居然都不输入参数&#xff0c;可恶!!!!!!!!!<?php ## 放弃把&#xff0c;小伙子&#xff0c;你真的不会RCE,何必在此纠结呢&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#…

springboot2入门到实战-整合QQ邮箱

springboot整合QQ邮箱 配置邮箱 登录邮箱服务器&#xff1a; 登录QQ邮箱 springboot整合email 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency>配…

Python习题详解

练习&#xff1a; 1&#xff0c;计算100以内奇数的和 #计算100以内所有奇数的和 sum 0 # n 1 # while n < 100: # # sum sum n # sum n # # n n 2 # n 2 # print(sum) n 99 #求偶数时n 100 while n > 0:sum n# n n - 2n - 2 print(sum)2&#xff0c;打印直…

开源大数据集群部署(十二)Ranger 集成 hive

作者&#xff1a;櫰木 1、解压安装 在hd1.dtstack.com主机上执行&#xff08;一般选择hiveserver2节点&#xff09; 解压ranger-2.3.0-hive-plugin.tar.gz [roothd1.dtstack.com software]#tar -zxvf ranger-2.3.0-hive-plugin.tar.gz修改install.properties配置 [roothd1…

Unity中.Net与Mono的关系

什么是.NET .NET是一个开发框架&#xff0c;它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)两种约定&#xff0c; CIL标准为一种编译标准&#xff1a;将不同编程语言&#xff08;C#, JS, VB等&#xff09;使用各自的编译器&#xff0c;按照统…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿59yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

VMware虚拟机从一台电脑复制到另一台电脑

1 概述 在一台电脑上利用虚拟机安装了OS系统&#xff0c;特别是如果虚拟机中的系统进行了各种繁琐的配置&#xff0c;因为换电脑或者需要在其他电脑上配置&#xff0c;这个时候就可以将虚拟机中的系统复制拷贝一份到新电脑上&#xff0c;省时省力。 2 操作步骤 2.1 vmx文件 …

高原制氧机的工作原理以及对高原地区生活质量的积极影响

在广袤的高原地区&#xff0c;空气稀薄&#xff0c;氧气含量相对较低&#xff0c;给当地居民和外来游客带来了不小的困扰。然而&#xff0c;随着科技的飞速进步&#xff0c;高原制氧机应运而生&#xff0c;成为改善高原生活质量的重要利器。恒业通将探讨高原制氧机的工作原理、…
推荐文章