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

设计原则 | 依赖转置原则

一、依赖转置原则(DIP:Dependence Inversion Principle)

1、原理

  • 高层模块不应该依赖低层模块,二者都应该依赖于抽象
  • 抽象不应该依赖于细节,细节应该依赖于抽象

2、层次化

Booch曾经说过:所有结构良好的面向对象软件架构都具有清晰的层析定义,每个层次通过一个定义良好的、受控的接口向外提供了一组内聚的服务。下面给出了一个简单的层次化结构方案,如下:

在这里插入图片描述

下面展示的是一个更为合理的方案,每个较高层次都为它所需要的服务声明一个抽象接口,较低的层次实现了这些抽象接口。每个高层类都通过该抽象接口使用下一层,这样高层就不依赖于低层,低层反而依赖于在高层中声明的抽象服务接口,这样就解除了高层对于低层模块的依赖,如下:

在这里插入图片描述

2、为什么叫"转置"

转置有下面两层含义

  • 依赖关系的转置
  • 接口所有权的转置

传统的软件开发方法,比如结构化的分析与设计。倾向于创建一些高层模块依赖低层模块的软件架构。这样的软件架构存在一个很严重的问题,一旦低层模块变动高层模块也会受影响。

相关文章:

设计原则 | 依赖转置原则

一、依赖转置原则(DIP:Dependence Inversion Principle) 1、原理 高层模块不应该依赖低层模块,二者都应该依赖于抽象抽象不应该依赖于细节,细节应该依赖于抽象 2、层次化 Booch曾经说过:所有结构良好的面…...

前端开发实用技巧与经验分享

导语:在前端开发领域,掌握一些实用的技巧和经验可以帮助你更高效地完成任务。本文将分享一些前端开发的实用技巧和经验,帮助你在工作中更好地应对各种挑战。 一、使用开发者工具进行调试和优化 熟练掌握浏览器开发者工具的使用,…...

推荐一款Excel快速加载SQL的插件,方便又好用

如果告诉你只需要双击一下,SQL数据库中存放在表里面的数据,就能加载到你的Excel中,你想不想要? 今天给大家推荐一款好用的Excel插件,安装简单,使用方便,是经常使用SQL数据库的不二。 这款插件…...

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)

Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…...

http和https的区别有哪些

目录 HTTP(HyperText Transfer Protocol) HTTPS(HyperText Transfer Protocol Secure) 区别与优势 应用场景 未来趋势 当我们浏览互联网时,我们经常听到两个常用的协议:HTTP(HyperText Tra…...

使用Keil-MDK生成*.bin格式可执行文件

使用Keil-MDK生成*.bin格式可执行文件 文章目录 使用Keil-MDK生成*.bin格式可执行文件前言一、fromelf.exe工具二、使用方法1.配置输出2.输出格式 前言 在使用Keil MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件。虽然文件可…...

基于springboot+vue篮球联盟管理系统源码

🍅 简介:500精品计算机源码学习 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 文末获取源码 目录 一、以下学习内容欢迎交流: 二、文档资料截图: 三、项目技术栈 四、项目运行图 背景: 篮球运…...

分页助手入门以及小bug,报sql语法错误

导入坐标 5版本以上的分页助手 可以不用手动指定数据库语言&#xff0c;它会自动识别 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency&g…...

Java中的并发编程:深入理解CountDownLatch

Java中的并发编程&#xff1a;深入理解CountDownLatch 本文将深入探讨Java中的并发编程&#xff0c;重点关注CountDownLatch的使用。通过理解这些概念和技术&#xff0c;我们可以编写出更高效、稳定的Java程序。 一、CountDownLatch简介 CountDownLatch是Java中的一个同步工具…...

Windows 安装 flash-attention 和 bitsandbytes

首先保证cuda版本为12.1&#xff0c;torch版本为2.1.0及以上&#xff0c;python版本3.10以上 从此处下载最新版的whl&#xff0c;https://github.com/jllllll/bitsandbytes-windows-webui/releases/tag/wheels&#xff0c;通过whl来安装bitsandbytes 从此处下载最新版的whl&a…...

AHB 与 DMA

AHB&#xff08;先进高性能总线&#xff09; 随着深亚微米工艺技术日益成熟&#xff0c;集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法&#xff0c;发展到基于IP核复用的设计方法&#xff0c;并在SOC设计中得到了广泛应用。在基于IP核复用的SoC&#xff08;Syst…...

React使用echarts并且修改echarts图大小

React使用echarts 引入 npm install --save echarts-for-react npm install --save echarts使用 <ReactEChartsoption{option}notMerge{true}lazyUpdate{true}style{{"width": "100%","height": "800px"}}theme{"theme_nam…...

【Q6-30min】

1. ifndef/define/endif的作用&#xff1a;避免头文件被重复引用。 2.堆栈溢出主要的原因是&#xff1a; &#xff08;1&#xff09;函数调用层次太深。函数递归调用时&#xff0c;系统要在栈中不断保存函数调用时的现场和产生的变量&#xff0c;如果递归调用太深&#xff0c;…...

C++之类和对象(下)

目录 初始化列表 static成员 C11对于非静态成员变量初始化 友元 友元函数 友元类 总结 初始化列表 我们知道&#xff0c;在学习构造函数时&#xff0c;我们知道对象的成员变量的初始化我们是在构造函数函数体内进行初始化的&#xff0c;还有没有其它初始化成员变量的方…...

微服务开发:断路器详解

微服务是目前业界使用的最重要的实现方面。通过使用微服务架构&#xff0c;开发人员可以消除他们以前在单体应用程序中遇到的许多问题。展望未来&#xff0c;人们开始在微服务中搜索和采用各种模式。大多数时候&#xff0c;新模式的产生是为了解决另一个模式中出现的常见问题。…...

Leetcode—383.赎金信【简单】

2023每日刷题&#xff08;五十&#xff09; Leetcode—383.赎金信 实现代码 class Solution { public:int arr[26] {0};int arr2[26] {0};bool canConstruct(string ransomNote, string magazine) {int len ransomNote.size();int len2 magazine.size();for(int i 0; i …...

爬虫-xpath篇

1.xpath的基础语法 表达式描述nodename选中该元素/从根节点选取、或者是元素和元素间的过渡//从匹配选择的当前节点选择文档中的节点&#xff0c;而不考虑它们的位置.选取当前节点…选取当前节点的父节点选取属性text()选取文本 举例&#xff1a; 路径表达式结果html选择html元…...

Oracle初始化参数文件pfile和spfile

pfile &#xff1a;Oracle 9i之前&#xff0c;ORACLE一直采用PFILE方式存储初始化参数&#xff0c;该文件为文本文件&#xff0c;可以在操作系统级别修改。当spfile文件修改出现错误导致oracle无法启动时&#xff0c;可以使用 pfile文件启动数据库 spfile&#xff1a;从Oracle…...

zookeeper 客户端常用命令简单记录(实操课程系列--watcher功能测试)(发布订阅功能测试)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09; 1、命令行工具切换到zookeeper的bin目录下面&am…...

Scrapy爬虫数据存储为JSON文件的解决方案

什么是JSON文件 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人们阅读和编写&#xff0c;同时也易于机器解析和生成。它基于JavaScript Spark语言的一个子集&#xff0c;但独立于Smashing语言&#xff0c;因此在许多中…...

群晖NAS人脸识别功能解锁指南:让旧设备焕发AI新活力

群晖NAS人脸识别功能解锁指南&#xff1a;让旧设备焕发AI新活力 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 为何老款群晖NAS需要AI能力升级&…...

K型热电偶的5个常见设计坑:从运放选型到单片机ADC采样的避坑指南

K型热电偶的5个常见设计坑&#xff1a;从运放选型到单片机ADC采样的避坑指南 在工业测温领域&#xff0c;K型热电偶凭借其宽温区、高性价比和良好的线性度&#xff0c;成为工程师们的首选传感器之一。然而&#xff0c;许多初入行业的硬件工程师在实际应用中常常踩入一些"…...

如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题?

如何用Real-ESRGAN-ncnn-vulkan解决5种常见的图像质量问题&#xff1f; 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcode.co…...

Nunchaku-flux-1-dev在AI编程教学中的应用:代码纠错与优化

Nunchaku-flux-1-dev在AI编程教学中的应用&#xff1a;代码纠错与优化 1. 引言 编程学习过程中&#xff0c;很多初学者都会遇到这样的困境&#xff1a;写出的代码运行报错&#xff0c;却不知道错在哪里&#xff1b;代码虽然能运行&#xff0c;但效率低下、结构混乱&#xff0…...

Qwen3.5-4B-Claude-Opus零基础上手:Web交互页面功能详解与最佳实践

Qwen3.5-4B-Claude-Opus零基础上手&#xff1a;Web交互页面功能详解与最佳实践 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。…...

DeerFlow免运维部署:自动日志监控与服务启动检测

DeerFlow免运维部署&#xff1a;自动日志监控与服务启动检测 1. 认识你的深度研究助理&#xff1a;DeerFlow 想象一下&#xff0c;你有一个不知疲倦的研究助手。它能帮你搜索全网信息、分析复杂数据、撰写专业报告&#xff0c;甚至还能把枯燥的研究结果变成一段生动的播客。听…...

FPGA做信号处理,你的浮点加减法拖后腿了吗?聊聊Vivado Floating-point IP核的性能调优

FPGA信号处理中浮点加减法的性能瓶颈与Vivado Floating-point IP核深度调优 在雷达脉冲压缩、波束成形等实时信号处理系统中&#xff0c;浮点运算单元往往是制约整体性能的关键瓶颈。许多工程师在完成基础功能验证后&#xff0c;常发现系统吞吐量不达标或时序无法收敛&#xff…...

OpenClaw+Qwen3.5-9B实战:5步完成本地AI助手部署与飞书接入

OpenClawQwen3.5-9B实战&#xff1a;5步完成本地AI助手部署与飞书接入 1. 为什么选择OpenClawQwen3.5-9B组合&#xff1f; 去年冬天&#xff0c;当我第5次因为忘记整理会议录音而被领导提醒时&#xff0c;终于决定给自己找个"数字助理"。在尝试了多个自动化工具后&…...

【具身智能07】具身智能世界模型与端到端架构:从看见到理解物理规律

07_具身智能世界模型与端到端架构 关键词 世界模型,端到端架构,VLA模型,DreamerV3,RoboCat,WALL-A,云边端协同,系统012架构,多时间尺度预测,因果推理一、引言:从反应式感知到预测式认知的范式转变 2024年之前,具身智能的主流是"感知-行动"反应式回路——机器人看到杯…...

零基础玩转OpenClaw:Qwen3.5-9B镜像+可视化控制台体验

零基础玩转OpenClaw&#xff1a;Qwen3.5-9B镜像可视化控制台体验 1. 为什么选择OpenClawQwen3.5-9B组合 去年我在整理个人知识库时&#xff0c;每天要花2小时重复执行网页截图、OCR识别、内容归档的机械操作。直到发现OpenClaw这个能像人类一样操作电脑的开源智能体框架&…...