设计原则 | 依赖转置原则

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

1、原理

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

2、层次化

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

在这里插入图片描述

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

在这里插入图片描述

2、为什么叫"转置"

转置有下面两层含义

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

丢包问题定位(一)

1,原理图 从上图我们分两个部分,一部分是host测(靠近交换sdk测) ,一部分是line测(靠近光模块测) 这里我们靠近交换(与交换测连接的是retimer芯片)。 当设备丢包时我们怎么定位呢! 先弄清楚设备的连接情况,确认是模块问题,设备问题,还是参数问题,前两种是个例,…

利用udev 修改 网卡名称 的方法和规则文件不生效 可能的查找方法

为什么要修改? 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序。我们也希望能跟设备外部的丝印对的上 方法: 利用udev 机制。 在 /etc/udev/rules.d/ 下增加…

指针(二)

这里写目录标题 字符指针字符指针与常量字符串的区别: 指针数组数组指针两者的区别:&数组名 ,sizeof(arr)数组指针的使用数组参数,指针参数一维数组传参整型数组:整型指针数组: 一级指针传参二级指针传…

配置REST API数据访问

大家好,才是真的好。 我希望你看过前一篇内容《Domino REST API安装和运行》。没有看过也没有关系,毕竟你可以点击上面的链接再去看一遍。 至于这一篇,趁热打铁,我们主要来讲述如何配置Domino Rest API的数据访问。 首先这里有…

电子学会C/C++编程等级考试2021年03月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天,他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上。瓶子里都装有不同体积的酒。令Santo高兴的是,瓶子中的酒都有不同的味道。房东说道:“你可以…

鸿蒙4.0开发笔记之ArkTS语法基础之条件渲染和循环渲染的使用(十五)

文章目录 一、条件渲染(if)二、循环渲染(ForEach) 一、条件渲染(if) 1、定义 正如其他语言中的if…else…语句,ArkTS提供了渲染控制的能力,条件渲染可根据应用的不同状态&#xff0…

计算机服务器中了locked勒索病毒的正确处理流程,locked勒索病毒解密

随着网络技术在企业生产运营中的进行,越来越多的企业开始利用网络走向数字化办公模式,数字化办公是企业的较为智能与先进的办公系统,这要求企业在日常工作中要确保计算机系统的安全,以防网络安全威胁时间的产生。近期,…

Image Segmentation Using Deep Learning: A Survey

论文标题:Image Segmentation Using Deep Learning:A Survey作者:发表日期:阅读日期 :研究背景:scene understanding,medical image analysis, robotic perception, video surveillance, augmented reality, and image…

光伏系统方案设计的注意点

随着太阳能技术的日益发展,光伏系统已经成为一种重要的可再生能源解决方案。然而,设计一个高效、可靠的光伏系统需要考虑到许多因素。本文将探讨光伏系统方案设计的注意点,包括系统规模、地理位置、组件选择、系统布局和运维策略。 系统规模 …

服务器——单个显卡的CPU占用比达到100%,但GPU使用率为0(卡住了)的解决办法

一、现象: 二、解决办法 先输入 htop,进入任务管理器。然后找到对应进程,按F9,再按一下9。

CVE初探之漏洞反弹Shell(CVE-2019-6250)

概述 ZMQ(Zero Message Queue)是一种基于消息队列得多线程网络库,C编写,可以使得Socket编程更加简单高效。 该编号为CVE-2019-6250的远程执行漏洞,主要出现在ZMQ的核心引擎libzmq(4.2.x以及4.3.1之后的4.3.x)定义的ZMTP v2.0协议中。 这一…

etcd 与 Consul 的一致性读对比

本文分享和对比了 etcd 和 Consul 这两个存储的一致性读的实现。 作者:戴岳兵,爱可生研发中心工程师,负责项目的需求开发与维护工作。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本…

如何从eureka-server上进行服务发现,负载均衡远程调用服务

在spring cloud的maven的pom文件中添加eureka-client的依赖坐标 <!--eureka-client依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependen…

Apache Kafka CVE-2023-25194(metasploit版)

Step1&#xff1a;用docker搭建环境 Step2&#xff1a;docker查看映射端口 Step3&#xff1a;访问特定端口&#xff0c;然后靶标应用。 Step4&#xff1a;用metasploit进行攻击&#xff1a; 首先&#xff0c;打开metasploit&#xff0c;然后查询需要攻击的板块&#xff0…

如何搭建软件测试环境?

关于如何搭建测试环境&#xff0c;也是面试会经常问到的一个问题&#xff0c;一般常见于一些创业公司&#xff0c;因为测试环境不够完善&#xff0c;可能会遇到搭建环境这个问题。 一般来说&#xff0c;测试环境搭建都属于运维的工作范畴&#xff0c;但是可能有些创业公司就没有…

103.进程概述

目录 1.并行和并发 区别&#xff1a; 2.PCB 3.进程状态 4. 进程命令 从严格意义上来讲&#xff0c;程序和进程是两个不同的概念&#xff0c;他们的状态&#xff0c;占用的系统资源都是不同的。 程序&#xff1a;程序是一种静态实体&#xff0c;是存储在计算机存储介质上的…

Python通过 psd-tools 解析 PSD 文件

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com PSD&#xff08;Photoshop Document&#xff09;是Adobe Photoshop软件中使用的图像文件格式&#xff0c;包含图层、通道、蒙版等信息。在Python中&#xff0c;我们可以使用 psd-tools 库来解析和处理PSD文件。本…

开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!

你好&#xff0c;我是 Kagol。 前言 从今年2月份开源以来&#xff0c;有不少朋友给我们 TinyVue 组件库提了文档优化的建议&#xff0c;这些建议都非常中肯&#xff0c;我们也在持续对文档进行优化&#xff0c;并且从中总结出了大家对于文档优化的一些共性问题&#xff0c;形…

YOLOv8改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制&#xff0c;它通过三个不同的视角来分析输入的数据&#xff0c;就好比三个人从不同的角度来观察同一幅画&#xff0c;然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

云上守沪 | 云轴科技ZStack成功实践精选(上海)

为打造国际数字之都&#xff0c;上海发布数字经济发展“十四五”规划&#xff0c;围绕数字新产业、数据新要素、数字新基建、智能新终端等重点领域&#xff0c;加强数据、技术、企业、空间载体等关键要素协同联动&#xff0c;加快进行数字经济发展布局&#xff1b;加快基础软件…