当前位置: 首页 > news >正文

Python桥接模式介绍、使用

一、Python桥接模式介绍

概念:

        Python桥接模式(Bridge Pattern)是一种软件设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。

        它可以通过使用桥接接口来创建一个桥接对象来连接抽象和实现部分。

功能:

         桥接模式的主要功能是将抽象部分和实现部分解耦,使得它们可以独立地变化。

        在实现部分改变时,抽象部分不会受到影响,反之亦然。这使得系统更加灵活和可扩展。

优点:

         1.分离抽象和实现部分,使得系统更容易扩展和维护;

        2.提高代码的可重用性和可扩展性;

        3.对于需要在多个平台上运行的程序,桥接模式可以避免代码的重复编写。

缺点:

        1.增加了系统的复杂度,需要设计更多的类和接口;

         2.桥接模式需要使用抽象类和接口,这会增加代码的复杂度。

应用场景:

        1.当需要扩展一个类的功能时,使用桥接模式可以避免修改原来的类;

        2.当一个类有多个实现时,使用桥接模式可以避免在多个实现之间进行切换;

        3.当需要在多个平台上运行的程序时,使用桥接模式可以避免编写重复的代码。

使用方式:

        桥接模式的实现方式是使用抽象类和接口来分离抽象和实现部分。

        抽象部分由抽象类或接口来定义,实现部分由具体的实现类来继承。

        桥接接口将抽象和实现部分连接起来,使得它们可以独立地变化。

在应用程序开发中的应用:

        Python桥接模式在应用程序开发中经常被使用。

        例如,在大型的软件系统中,很多功能都需要进行扩展和修改,使用桥接模式可以避免对原来的代码进行修改。

        另外,在需要在多个平台上运行的程序中,桥接模式可以避免编写重复的代码,提高代码的可重用性和可扩展性。

二、使用

工作原理:

        桥接模式的工作原理是将抽象部分和实现部分分离,使得它们可以独立地变化。

        在实现部分改变时,抽象部分不会受到影响,反之亦然。

        这使得系统更加灵活和可扩展。

        具体实现方式是使用抽象类和接口来分离抽象和实现部分,使用桥接接口来连接抽象和实现部分。

示例:

假设我们正在开发一个电脑品牌的销售系统,需要将电脑品牌和操作系统分离,使得系统更加灵活和可扩展。这时候就可以使用Python桥接模式来实现。

1.首先定义抽象类Computer和操作系统的接口OperatingSystem:

2.实现具体的电脑品牌和操作系统:

3.最后使用桥接接口将抽象和实现部分连接起来:

# abc模块提供了一个称为ABC的类和一个称为abstractmethod的装饰器,用于抽象基类(Abstract Base Classes)
from abc import ABC, abstractmethodclass Computer(ABC):@abstractmethod # @abstractmethod是Python装饰器语法中的一种,用于定义抽象方法。抽象方法是一种在抽象基类中声明但不实现的方法。其他非抽象子类必须实现这些方法来满足抽象基类的规范。def run(self):passclass OperationSystem(ABC):@abstractmethoddef install(self):passclass Linux(OperationSystem):def install(self):print("install Linux operation system")class Dell(Computer): # 继承抽象类Computerdef __init__(self, os):self._os = osdef run(self): # 实现抽象类中声明的run方法print("run Dell Computer")self._os.install()class Lenovo(Computer):def __init__(self, os):self._os = osdef run(self):print("run Lenovo")self._os.install()class Windows(OperationSystem):def install(self):print("install Windows operation system")class Linux(OperationSystem):def install(self):print("install Linux operation system")# 使用桥接接口将抽象和实现部分连接起来
os = Windows()
dell = Dell(os)
dell.run()os = Linux()
lenovo = Lenovo(os)
lenovo.run()

这样就可以将电脑品牌和操作系统分离开来,实现了桥接模式,使得系统更加灵活和可扩展。如果需要增加新的电脑品牌或操作系统,只需要实现抽象类和接口即可,不需要修改原来的代码

        运行结果:

run Dell Computer
install Windows operation system
run Lenovo
install Linux operation system

三、其它

from abc import ABC, abstractmethod说明

在Python中,abc模块提供了一个称为ABC的类和一个称为abstractmethod的装饰器,用于抽象基类(Abstract Base Classes)。抽象基类是一种特殊的类,用于定义接口和规范,并且不能被实例化。

ABC是所有抽象基类的基类,它本身不是抽象类。通过继承ABC类可以将普通类变成抽象类。abstractmethod装饰器用于定义抽象方法,这些方法必须由子类实现。在没有实现抽象方法的情况下,子类无法被实例化。

使用ABCabstractmethod可以实现多态和规范化。在抽象基类中定义接口和规范,编写代码时可以基于接口编程,从而降低代码的耦合度,提高代码可复用性和可维护性。

 @abstractmethod说明

@abstractmethod是Python装饰器语法中的一种,用于定义抽象方法。抽象方法是一种在抽象基类中声明但不实现的方法。其他非抽象子类必须实现这些方法来满足抽象基类的规范。

使用@abstractmethod装饰器时,需要在抽象基类中定义一个方法,并在该方法上使用装饰器。具体语法如下:

from abc import ABC, abstractmethodclass MyAbstractClass(ABC):@abstractmethoddef my_abstract_method(self):pass

在上面的代码中,MyAbstractClass是一个抽象基类,包含一个抽象方法my_abstract_method。使用@abstractmethod装饰器修饰这个方法表示它是一个抽象方法,必须由其子类实现。在抽象方法中通常不会实现任何具体功能,而只是提供了一个框架或接口,以便子类实现。

可以在非抽象基类中实现抽象方法,也可以在非抽象基类中再次声明为抽象方法。如果子类未实现其在抽象基类中声明的所有抽象方法,则该子类也将成为抽象类。

相关文章:

Python桥接模式介绍、使用

一、Python桥接模式介绍 概念: Python桥接模式(Bridge Pattern)是一种软件设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。 它可以通过使用桥接接口来创建一个桥接对象来连接抽象和实现部分。 功能…...

ChatGPT在知识图谱的构建和更新中的应用如何?

ChatGPT在知识图谱的构建和更新中具有重要的应用潜力。知识图谱是一种用于表示和存储结构化知识的图形化数据模型,通常由实体、属性和关系组成。知识图谱的构建和更新是一个复杂而关键的过程,涉及知识的收集、组织、链接和推理。ChatGPT作为一种预训练语…...

JS正则表达式:常用正则手册/RegExp/正则积累

一、正则基础语法 JavaScript 正则表达式 | 菜鸟教程 JS正则表达式语法大全(非常详细) 二、使用场景 2.1、校验中国大陆手机号的正则表达式 正则 /^1[3456789]\d{9}$/解释 序号正则解释1^1以数字 1 开头2[3456789]第二位可以是 3、4、5、6、7、8、…...

自动化测试框架unittest与pytest的区别!

引言 前面文章已经介绍了python单元测试框架,大家平时经常使用的是unittest,因为它比较基础,并且可以进行二次开发,如果你的开发水平很高,集成开发自动化测试平台也是可以的。而这篇文章主要讲unittest与pytest的区别&…...

【Git】

学习来自于: 女朋友乱用Git,差点把我代码删了。。。 一些常用的Git 知识点整理 关于Git这一篇就够了 Git基本命令大全 30分钟精通Git,学不会来找我 Git 版本管理 | 莫烦PYTHON Git 代码版本管理教程 文章目录 【前言】集中式与分布式的…...

[论文笔记] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Honda, Hiroto, and Yusuke Uchida. “CLRerNet: Improving Confidence of Lane Detection with LaneIoU.” arXiv preprint arXiv:2305.08366 (2023). 2023.05 出的一篇车道线检测的文章, 效果在CULane, CurveLanes SOTA 文章目录 简介LaneIoULineIoU存在问题为什么使用LaneIo…...

LeetCode|backtracking|review:40. 131. 93. 47. 332. | 37. Sudoku Solver

复习: 40. Combination Sum II [1,1,2,3]中,答案里有[1,1,2], 但是不能有两个[1,2,3] 131. Palindrome Partitioning 每个for都是在给定的start之后找一个palindrome。当start 93. Restore IP Addresses forloop每次loop都是在给定的start的后三个数…...

被泼冷水后,谁能超越微服务?

历史总会重演。一切刚过去的,又会被重新提起。开源项目Codename One的联合创始人Shai,曾是Sun Microsystems开源LWUIT项目的共同作者,参与了无数开源项目。作为最早一批Java开发者,最近感慨道:单体,又回来了…...

多线程(JavaEE初阶系列5)

目录 前言: 1.什么是定时器 2.标准库中的定时器及使用 3.实现定时器 结束语: 前言: 在上一节中小编给大家介绍了多线程中的两个设计模式,单例模式和阻塞式队列模式,在单例模式中又有两种实现方式一种是懒汉模式&a…...

Minimum Snap闭式求解相关公式推导

文章目录 1 M i n i m u m Minimum Minimum S n a p Snap Snap闭式求解的推导1.1 二次规划等式约束构建1.2 求 d d d1.3 转成无约束优化问题 1 M i n i m u m Minimum Minimum S n a p Snap Snap闭式求解的推导 可以看看我的这几篇Blog1,Blog2,Blog…...

Spring源码(五)— 解析XML配置文件(一) bean标签解析流程

前面几章的内容已经介绍了BeanFactory创建前的准备工作,以及加载XML配置文件前的准备的步骤。本章会着重介绍解析XML的步骤。 registerBeanDefinitions 前几个方法不做过多的赘述,着重看registerBeanDefinitions方法中解析XML的步骤。 public int regi…...

隐私政策声明

http://lxfamn.cn/tools 我们注重对您个人隐私的保护。有时候我们需要某些信息才能为您提供您请求的服务,本隐私声明解释了这些情况下的数据收集和使用情况。本隐私声明适用于本网站的所有相关服务。如果您访问本网站、使用本网站的任何服务,那么您便接受…...

Flutter 最佳实践和编码准则

Flutter 最佳实践和编码准则 视频 前言 最佳实践是一套既定的准则,可以提高代码质量、可读性和可靠性。它们确保遵循行业标准,鼓励一致性,并促进开发人员之间的合作。通过遵循最佳实践,代码变得更容易理解、修改和调试&#xff…...

LangChain Agents深入剖析及源码解密上(一)

LangChain Agents深入剖析及源码解密上(一) LangChain Agents深入剖析及源码解密上 Agent工作原理详解 本节会结合AutoGPT的案例,讲解LangChain代理(Agent)为核心的内容。我们前面已经谈了代理本身的很多内容,也看了绝大部分的源代码,例如:ReAct的源代码,还有mrkl的源代…...

css定义超级链接a标签里面的title的样式

效果: 代码: 总结:此css 使用于任何元素,不仅仅是a标签!...

hcip——路由策略

要求: 基础配置 AR1 [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24[R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip add 14.0.0.1 24[R1]int loop0 [R1-LoopBack0]ip add 1.1.1.1 24[R1]rip 1 [R1-rip-1]vers 2 [R1-rip-1]net…...

ReID网络:MGN网络(1) - 概述

Start MGN 1. 序言 现代基于感知的信息中,视觉信息占了80~85%。基于视觉信息的处理和分析被应用到诸如安防、电力、汽车等领域。 以安防市场为例,早在2017年,行业咨询公司IHS Market,我国在公共和私人领域安装有摄像头约1.76亿…...

C++数据结构笔记(10)递归实现二叉树的三序遍历

对于三种遍历方式来说,均为先左后右!区别在于根结点的位置顺序 先序遍历:根——左——右 中序遍历:左——根——右 后序遍历:左——右——根 (所谓先中后的顺序,是指根结点D先于子树还是后于…...

hMailServer-5.3.3-B1879.exe

hMailServer-5.3.3-B1879.exe...

后端校验JSR303

目录 一、导入依赖 二、实现步骤 三、分组校验 四、自定义校验 一、导入依赖 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency> 二…...

物联网与云技术赋能咖啡后处理:CeriTech 的实时监控系统实践

1. 项目概述&#xff1a;用物联网与云技术重塑咖啡后处理在印尼的咖啡农场里&#xff0c;传统的发酵与干燥过程很大程度上依赖“感觉”和“经验”。一位有经验的农人可能会用手触摸、用鼻子闻&#xff0c;或者根据天气和日照时间来估算发酵是否完成、干燥是否均匀。这种方法固然…...

1901-2022年中国气温变化分析实战:用这份1km栅格数据我们能发现什么?

1901-2022年中国气温变化分析实战&#xff1a;如何从1km栅格数据中挖掘气候演变规律当一份覆盖122年、分辨率精确到1公里的气温栅格数据摆在面前时&#xff0c;我们看到的不仅是数字矩阵&#xff0c;更是一部写在经纬度坐标里的气候变迁史诗。这份由逐月数据聚合生成的逐年气温…...

ShrinkBox后门攻击:如何让自动驾驶模型“看错”距离,威胁ML-ADAS安全

1. 项目概述在自动驾驶和高级驾驶辅助系统&#xff08;ADAS&#xff09;领域&#xff0c;基于机器学习的目标检测模型&#xff0c;如YOLO系列&#xff0c;已成为感知环境、实现碰撞预警的核心组件。这些模型通过实时识别和定位道路上的车辆、行人等目标&#xff0c;为后续的距离…...

LoRa物联网与动态基线算法在养殖体温监测中的实战应用

1. 项目概述&#xff1a;为什么我们需要一个智能体温监测系统&#xff1f;在规模化养殖场里干了十几年&#xff0c;我见过太多因为体温异常没被及时发现而导致的损失。一头育肥猪突然不吃食&#xff0c;等饲养员第二天巡栏发现时&#xff0c;可能已经高烧好几天&#xff0c;继发…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

四大桌面云品牌评测:从安全、体验到性价比

桌面云不再是大型企业的专属&#xff0c;它已成为各行各业实现数据安全、混合办公和IT降本增效的“标准配置”。经过对市场主流方案的全面评估&#xff0c;我们认为&#xff0c;深信服&#xff08;Sangfor&#xff09;aDesk桌面云因其在安全内生化、传输协议自研化、运维管理智…...

拒绝延迟与黑屏:向日葵控制端 局域网直连 P2P 穿透与无头服务器(Headless)虚拟显示器优化指南

拒绝延迟与黑屏&#xff1a;向日葵控制端 局域网直连 P2P 穿透与无头服务器&#xff08;Headless&#xff09;虚拟显示器优化指南 在远程开发、分布式部署及日常运维场景中&#xff0c;我们经常需要远程连接到公司的高配工作站、机房服务器或家中的调试开发机。 作为国内普及…...

3大核心模块+5步实战:用RPFM彻底改变《全面战争》模组开发体验

3大核心模块5步实战&#xff1a;用RPFM彻底改变《全面战争》模组开发体验 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: http…...

Switch控制器PC适配难题的技术解决方案:BetterJoy架构解析与高级配置指南

Switch控制器PC适配难题的技术解决方案&#xff1a;BetterJoy架构解析与高级配置指南 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: ht…...

揭秘CuCl超低热导率:四声子散射与温度重正化的关键作用

1. 项目概述&#xff1a;为何要深挖CuCl的热导率&#xff1f;在材料科学和凝聚态物理的交叉领域&#xff0c;热输运性质的研究从来都不是一个孤立的课题。它直接关系到热电材料的转换效率、电子器件的散热能力&#xff0c;以及热障涂层的服役寿命。传统上&#xff0c;我们倾向于…...