设计模式:依赖倒转原则(Dependency Inversion Principle,DIP)介绍

依赖倒转原则(Dependency Inversion Principle,DIP)是面向对象设计原则之一,它强调高层模块不应该依赖于底层模块,二者都应该依赖于抽象。同时,抽象不应该依赖于具体实现细节,具体实现细节应该依赖于抽象。

该原则的实现原理可以通过以下几点来说明:

  1. 抽象定义接口: 高层模块定义抽象接口或者抽象类,而不是具体的实现类。这样,高层模块就不会依赖于底层模块的具体实现细节。

  2. 底层模块实现接口: 底层模块实现抽象接口或者抽象类,从而达到高层模块和底层模块之间解耦的目的。

  3. 通过依赖注入解耦: 高层模块通过依赖注入的方式将具体实现类的对象注入到抽象接口或者抽象类中,从而实现高层模块和底层模块的解耦。

在 Python 中,实现依赖倒转原则可以通过以下方式:

# 高层模块, 不依赖底层模块
class Switch:# Switch 类依赖于抽象接口(即 device 参数),而不依赖于具体的实现类# 抽象不依赖于具体实现细节def __init__(self, device):self.device = devicedef turn_on(self):self.device.turn_on()def turn_off(self):self.device.turn_off()# 底层模块,具体的实现类
class DeviceA:# 具体实现细节依赖于抽象def turn_on(self):print('device A turn on')def turn_off(self):print('device A turn off')deviceA = DeviceA()'''
通过依赖注入的方式,将具体实现类的对象(deviceA)注入到 Switch 类中,实现高层模块和底层模块的解耦
'''
switch_deviceA = Switch(deviceA)switch_deviceA.turn_on()

运行结果:

device A turn on

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

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

相关文章

嵌入式开发学习--进程、线程

什么是进程 进程和程序的区别 概念 程序:编译好的可执行文件,存放在磁盘上的指令和数据的有序集合(文件),程序是静态的,没有任何执行的概念。 进程:一个独立的可调度的任务,执行一…

高可靠性部署系列(3)--- ASG双机热备(HA)

高可靠性部署系列(3)--- ASG双机热备(HA) 前言网络拓扑设备选型网络规划组网需求配置思路操作步骤步骤 1 HA接口管理地址配置步骤 2 HA全局配置步骤 3 配置同步步骤 4 接口状态同步组创建结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支…

东方博宜1009 - 数组逆序

题目描述 给你 nn 个整数,将其逆序输出。 输入 第一行一个整数 nn (3 \le n \le 1003≤n≤100)代表数的个数。 第二行 nn 个整数(空格隔开)(这些数在 0 \sim 10^60∼106 之间)。 输出 nn 个整数(空格…

恶补《操作系统》3_1——王道学习笔记

3内存管理 3.1_1 内存的基础知识 1、什么是内存,作用 (1)内存:内存用来存放数据。程序执行前需要先放到内存中才能被CPU处理――缓和CPU与硬盘之间的速度矛盾。 (2)内存存储单元:每个地址对应…

AIGC技术的发展现状和未来趋势

AIGC(人工智能生成内容)技术是指利用人工智能算法自动生成文本、图像、音频、视频等各类内容的技术。随着深度学习等技术的快速发展,AIGC技术在最近几年取得了显著进步,并在多个领域展现出巨大的潜力。 ​ 编辑 发展现状&#x…

前端数字计算精度问题

计算精度问题通常发生在浮点数运算中,由于浮点数的表示所限,可能导致精度损失。 举例 // 比如 0.1 0.2 // 结果为 0.30000000000000004 0.3 - 0.1 // 结果为 0.19999999999999996vue vue 使用decimal.js 解决小数相加合计精确度丢失问题 微信小程序 …

【2024系统架构设计】回顾历史,查缺补漏篇 ①

前言 hello,大家好: 💡💡💡 我们一起来备考软考高级系统架构设计师吧,本专栏提供综合知识、案例科目、论文(论点和部分示例范文)等内容,包括知识点总结和记忆小妙招哦。 🚀🚀🚀 可以减少资料查找和收集的时间,提高效率,我们一起

ARM功耗管理背景及挑战

安全之安全(security)博客目录导读

服务器网站漏洞怎么修复

服务器网站漏洞的修复是一个关键且复杂的过程,涉及到多个层面的安全加固。以下是一个关于如何修复服务器网站漏洞的详细指南。安全狗专业做服务器安全,有任何服务器安全问题都可以找安全狗哦. ​一、识别和分析漏洞 首先,要确定服务器网站存在…

基于NodeJS + Swagger UI搭建Web API界面

基于NodeJS Swagger UI搭建Web API界面 前言一、创建基于NodeJS的Swagger运行目录二、添加Swagger官方的示例1.创建public工作目录2.添加Swagger官方示例3.启动SwaggerUI实例 三、基于OpenAPI规范提供api文档 前言 Swagger是一个REST APIs文档在线自动生成和测试的框架 一、…

Linux下的基本指令(1)

嗨喽大家好呀!今天阿鑫给大家带来Linux下的基本指令(1),下面让我们一起进入Linux的学习吧! Linux下的基本指令 ls 指令pwd命令cd 指令touch指令mkdir指令(重要)rmdir指令 && rm 指令(重要)man指令(重要)cp指…

基于 NXP iMX8MM 测试 Secure Boot 功能

By Toradex秦海 1). 简介 嵌入式设备对于网络安全的要求越来越高,而 Secure boot就是其中重要的一部分。 NXP i.MX8MM/i.MX8MP 处理器基于 HABv4 特性来提供 Secure boot 启动过程中的 Chain of Trust; HABv4 是基于公共密钥加密 (Public Key Cryptogr…

C语言进阶:指针的进阶(上)

首先 在学习新知识之前 我们先来回顾下之前的学习的内容 1 指针是个变量 用来存放地址 地址唯一标识的一块内存空间 2 指针的大小是固定的4/8字节(32位平台/64位平台) 3 指针有类型的 指针的类型决定了两点 一个是指针操作的权限以及整数的步长 4 指针的…

神经网络项目:全连接网络和卷积网络实现水果三分类项目

水果三分类项目 Git源码:传送门 水果种类:草莓、树莓、桑葚 0:草莓 strawberry1:树莓 raspberry2:桑葚 mulberry 项目设计 获取数据 spider.py数据清洗 cleaner.py自定义数据集 dataset.py网络构建 net.py训练模型 t…

2024年新版宝塔面板如何安装WordPress网站教程

使用宝塔面板安装WordPress教程 一、准备工作 安装了宝塔面板后,我们就可以开始搭建自己的网站了。以安装WordPress为例,本文将详细介绍两种安装方式:手动安装和宝塔后台一键部署。请注意,尽管一键部署方便快捷,但可…

git工具简单使用

文章目录 git上传克隆README.gitignore常用指令冲突 git 进行版本控制的版本控制器。安装git yum install -y git 配置git git config --global user.email "youexample.com" 告诉git你的邮箱是什么?最好输入你的gitee的注册邮箱git config --global …

人工智能(pytorch)搭建模型28-基于Transformer的端到端目标检测DETR模型的实际应用,DETR的原理与结构

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型28-基于Transformer的端到端目标检测DETR模型的实际应用,DETR的原理与结构。DETR(Detected Transformers)是一种基于Transformer的端到端目标检测模型&…

利用tree-sitter提取代码文件中的函数和注释

利用tree-sitter提取代码文件中的函数和注释 1. 需求2. 工具3. 实现 1. 需求 提取.c或.cpp文件中的带有注释的函数,作为训练数据喂给大语言模型。要求是能够批量处理,提取函数前带有注释的函数和注释,并将函数中的注释同样提取出来作为辅助训…

把 KubeBlocks 跑在 Kata 上,真的可行吗?

背景 容器的安全性一直是广受关注的话题。这个领域也产生了很多不错的开源项目。Kata就是其中之一。 Kata Containers(简称 Kata)是一种开源项目,它提供了一种安全而高性能的容器运行时环境。Kata Containers 利用虚拟化技术(通常…

【算法刷题 | 贪心算法03】4.25(最大子数组和、买卖股票的最佳时机|| )

文章目录 4.最大子数组和4.1题目4.2解法一:暴力4.2.1暴力思路4.2.2代码实现 4.3解法二:贪心4.3.1贪心思路4.3.2代码实现 5.买卖股票的最佳时机||5.1题目5.2解法:贪心5.2.1贪心思路5.2.2代码实现 4.最大子数组和 4.1题目 给你一个整数数组 n…