Python与设计模式--代理模式
5-Python与设计模式–代理模式
一、网络服务器配置白名单
代理模式是一种使用频率非常高的模式,在多个著名的开源软件和当前多个著名的互联网产品后
台程序中都有所应用。下面我们用一个抽象化的简单例子,来说明代理模式。
首先,构造一个网络服务器:
#该服务器接受如下格式数据,addr代表地址,content代表接收的信息内容
info_struct=dict()
info_struct["addr"]=10000
info_struct["content"]=""
class Server:content=""def recv(self,info):passdef send(self,info):passdef show(self):pass
class infoServer(Server):def recv(self,info):self.content=inforeturn "recv OK!"def send(self,info):passdef show(self):print "SHOW:%s"%self.content
infoServer有接收和发送的功能,发送功能由于暂时用不到,保留。另外新加一个接口show,
用来展示服务器接收的内容。接收的数据格式必须如info_struct所示,服务器仅接受info_struct的
content字段。那么,如何给这个服务器设置一个白名单,使得只有白名单里的地址可以 访问服务器 呢?
修改Server结构是个方法,但这显然不符合软件设计原则中的单一职责原则。
在此基础之上,使用代理,是个不错的方法。
代理配置如下:
class serverProxy:pass
class infoServerProxy(serverProxy):server=""def __init__(self,server):self.server=serverdef recv(self,info):return self.server.recv(info)def show(self):self.server.show()class whiteInfoServerProxy(infoServerProxy):white_list=[]def recv(self,info):try:assert type(info)==dictexcept:return "info structure is not correct"addr=info.get("addr",0)if not addr in self.white_list:return "Your address is not in the white list."else:content=info.get("content","")return self.server.recv(content)def addWhite(self,addr):self.white_list.append(addr)def rmvWhite(self,addr):self.white_list.remove(addr)def clearWhite(self):self.white_list=[]
代理中有一个server字段,控制代理的服务器对象,infoServerProxy充当Server的直接接口代理, 而whiteInfoServerProxy直接继承了infoServerProxy对象,同时加入了white_list和对白名单的操作。 这样,在场景中通过对白名单代理的访问,就可以实现服务器的白名单访问了。
if __name__=="__main__":info_struct = dict()info_struct["addr"] = 10010info_struct["content"] = "Hello World!"info_server = infoServer()info_server_proxy = whiteInfoServerProxy(info_server)print info_server_proxy.recv(info_struct)info_server_proxy.show()info_server_proxy.addWhite(10010)print info_server_proxy.recv(info_struct)info_server_proxy.show()
打印如下:
Your address is not in the white list. SHOW: recv OK! SHOW:Hello
World!
二、代理模式
代理模式定义如下:为某对象提供一个代理,以控制对此对象的访问和控制。代理模式在使用过程中,
应尽量对抽象主题类进行代理,而尽量不要对加过修饰和方法的子类代理。如上例中,
如果有一个xServer继承了Server,并新加了方法xMethod,xServer的代理应以Server为主题进行设计,
而尽量不要以xServer为主题,以xServer为主题的代理可以从ServerProxy继承并添加对应的方法。
在JAVA中,讲到代理模式,不得不会提到动态代理。动态代理是实现AOP(面向切面编程)的重要实现手段。
而在Python中,很少会提到动态代理,而AOP则会以另一种模式实现:装饰模式。有关AOP的相关内容,
我们会在装饰模式这一节中进行说明。
三、代理模式的优点和应用场景
3.1 优点:
1、职责清晰:非常符合单一职责原则,主题对象实现真实业务逻辑,而非本职责的事务,交由代理完成;
2、扩展性强:面对主题对象可能会有的改变,代理模式在不改变对外接口的情况下,可以实现最大程度的扩展;
3、保证主题对象的处理逻辑:代理可以通过检查参数的方式,保证主题对象的处理逻辑输入在理想范围内。
3.2 应用场景:
1、针对某特定对象进行功能和增强性扩展。如IP防火墙、远程访问代理等技术的应用;
2、对主题对象进行保护。如大流量代理,安全代理等;
3、减轻主题对象负载。如权限代理等。
四、代理模式的缺点
1、可能会降低整体业务的处理效率和速度。
相关文章:
Python与设计模式--代理模式
5-Python与设计模式–代理模式 一、网络服务器配置白名单 代理模式是一种使用频率非常高的模式,在多个著名的开源软件和当前多个著名的互联网产品后 台程序中都有所应用。下面我们用一个抽象化的简单例子,来说明代理模式。首先,构造一个网…...
ubuntu挂载磁盘,以及开机自动挂载磁盘
1. 挂载临时磁盘(关机自动取消挂载) 在Ubuntu上挂载磁盘涉及到几个步骤,其中包括查看可用磁盘、创建挂载点、编辑 /etc/fstab 文件以确保在系统启动时自动挂载等。以下是一般的步骤: **查看可用磁盘和分区:**可以使用…...
Jetpack Compose中适应性布局的新API
Jetpack Compose中适应性布局的新API 针对大屏幕优化的新组合件。 使用新的Material适应性布局,为手机、可折叠设备和平板电脑构建应用程序变得更加简单!市场上各种不同尺寸的Android设备的存在挑战了构建应用程序时对屏幕尺寸的通常假设。开发者不应该…...
小航助学题库蓝桥杯题库stem选拔赛(22年1月)(含题库教师学生账号)
需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSD…...
蓝桥杯第100 题 九宫幻方 DFS 全排列 C++ 解题思维
题目 九宫幻方https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&name%E4%B9%9D 思路和解题方法 一 (DFS) 首先,定义了一些全局变量和数组。vis数组用于标记已经出现过的数字,a数组用于存储数独的初始状态…...
NOI / 1.10编程基础之简单排序 提问05:分数线划定 c语言 结构体
描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试…...
再探Docker:从Docker基础到跨服务器部署
摘要: 这篇文章将从介绍Docker基础开始,逐步讲解如何创建镜像、使用Docker Compose编排容器、在Docker中更新部署环境,将更新后的环境打包为镜像并导出为tar包,最后在其他服务器上应用这个镜像。 1. Docker是什么 Docker是一种容…...
C# 使用PanGu分词
写在前面 这是官方介绍:盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件,拥有大量用户。作者基于之前分词组件的开发经验,结合最新的开发技术重新编写了盘古分词组件。 盘古分词组件需要配合其字典文件使用&am…...
Termius 一款优秀的跨平台 SSH 客户端工具
🔥🔥🔥 作为程序员或者运维管理人员,我们经常需要使用终端工具来进行服务器管理及各种操作,比如部署项目、调试代码、查看/优化服务、管理服务器等。 而实现远程服务器连接需要借助 SSH 协议来进行,SSH&am…...
生命科学领域 - 新药从研发到上市全流程
新药是指新研制的、临床尚未应用的药物,其化学本质应为新的化合物或称新化学实体、 新 分子实体、新活性实体。新药研发的根本目的是治疗疑难危重疾病,研制出来的药物即使是全新的化学结构,但是疗效或安全性却不及现有的药物便失去新药价值&a…...
血的教训------入侵redis之利用python来破解redis密码
血的教训------入侵redis之利用python来破解redis密码 利用强大的python来进行redis的密码破解,过程不亦乐乎,当然也可以用shell脚本 本篇文章只供学习交流,请勿他用,谢谢。 其他相关联的文章 [1]VMware安装部署kail镜像服务器【…...
yolov8-pose 推理流程
目录 一、关键点预测 二、图像预处理 二、推理 三、后处理与可视化 3.1、后处理 3.2、特征点可视化 四、完整pytorch代码 yolov8-pose tensorrt 一、关键点预测 注:本篇只是阐述推理流程,tensorrt实现后续跟进。 yolov8-pose的tensorrt部署代码…...
笔记十七、认识React的路由插件react-router-dom和基本使用
react-router 分类 web使用 react-router-dom native使用 react-router-native anywhere(使用麻烦) react-router 安装 yarn add react-router-dom main.jsx import React from "react"; import ReactDOM from "react-dom/client"…...
CleanMyMac X4.14.5Crack最新Mac电脑清理优化最佳应用
CleanMyMac X 4.14.5是用于清理和优化Mac的最佳应用程序和强大工具。它看起来很棒而且很容易理解。该软件可以清理、保护、优化、稳定和维护您的 Mac 系统。您可以立即删除不必要的、不寻常的、无用的垃圾文件、损坏的文件垃圾,并释放大量内存空间。此外,…...
Linux shell单双引号区别
shell单双引号区别: Shell脚本中很多时候都在用单引号或双引号来框住字符串,但是他们之间是存在区别的 避免踩坑记录… 单引号 单引号中的任何字符都没有特殊含义,即一些转义字符,$ 变量引用都会无效,它只把他们当作一个单纯的…...
ES 8.x开始(docker-compose安装、kibana使用、java操作)
学习文档地址 一、Docker安装 这里使用docker-compose来安装,方便后续迁移,Elasticserach和kibina一起安装。 1、创建安装目录 configdataplugins 2、配置文件 配置文件有两个,一个是ES的配置文件,一个docker-compose的配置文件 …...
有了倾斜摄影,如何搭建一座智慧城市?
随着无人机航测、倾斜摄影等全新一代测绘信息技术方法的发展,可以迅速搜集制作精细化的城市三维模型,搭建城市地理信息基础服务架构。 近期都在重点关注的“智慧城市”究竟是什么,有什么重大作用,同时又面临着什么难关,…...
设计测试用例的具体方法总结
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️白马沉河共歃誓,怒涛没城亦不悔 ☁️基于需求进行测试用例的设计 基…...
计算机毕业设计|基于SpringBoot+MyBatis框架的仿天猫商城购物系统设计与实现
计算机毕业设计|基于SpringBootMyBatis框架的仿天猫商城购物系统设计与实现 迷你仿天猫商城是一个基于SSM框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物…...
JAXB的XmlValue注解
XmlValue注解用在Java属性、或者方法上。它可以使得映射到XML Schema中的Java类具有一个simpleContent 或者simpleType。 一个Java类中最多只能有一个属性被XmlValue注解。 如果被XmlValue注解的JavaBean属性是Java类中唯一映射到XML的成员,那么该Java类将会被映射…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
