设计模式:Inversion of Control (Dependency Inversion)

E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用 测试说明 测试模块数:3 测试模式:配置模式和传输模式 如果没有检测到串口,首先检查是否安装串口驱动CH341SER,下载链接,提取码:vaw2 工作模式 模式(0-3) M2 M1 M0 模式介绍 备注 0 传输模式 1 0 0 串口打开,无线打开,连续透明传输 空速支持手动配置和自适应波特率自动调节;连续模式双方波特率必须一致 1 RSSI 1 0 1 串口打开,无线打开,RSSI功能打开 模块每100ms输出RSSI强度值 2 测距模式 1 1 0 保留 - 3 配置模式 阅读详情

        以下文字来源于《从java走向javaee》。

      在模块设计时,高层的抽象模块通常是与业务相关的模块,它应该具有重用性,而不依赖于低层的模块,例如如果低层模块原先是磁盘存取模式,而高层模块是个存档备份的需求,如果高层模块直接调用低层模块的方法,则就对低层模块产生了依赖关系。

       例如下面这段代码:

//...
void save(){
    //...
    saveToFloppy();
}
     由于save()方法依赖于saveToFloppy(),如果要更换低层的存储模式为USB,则这个方法没有办法重用,必须加以修改才行,低层模式的更改造成了上层模式也必须跟着改变,这不是一个良好的设计方式,在设计上希望模式都依赖于模式的抽象,这样才可以重用上层的业务设计。如果以面向对象的方式来设计,依赖反转(Dependecy Inversion)解释变为方法不应该依赖实现,而是依赖于抽象,实现必须依赖于抽象。来看看下面这个java方法:

public class BusinessObject{
  private FloppyWriter writer=new FloppyWriter();
//...
  public void save(){
    //...
    writer.saveToFloppy();
  }
}
       在这个方法中,BusinessObject的存档依赖于实际的FloppyWriter,如果想要改为存至USB,则必须修改或继承BusinessObject,而无法直接使用BusinessObject。

      如果通过结构,可以改进这种情况,例如:

public interface IDeviceWriter{
  public void saveToDevice();
}
public void BusinessObject{
  private IDeviceWriter writer;
  public void setDeviceWriter(IDeviceWriter writer){
    this.writer=writer;
  }
  public void save(){
    writer.saveToDevice();
  }
}

    这样一来,BusinessObject就是可重用的,如果有存储至Floppy或USB的需求,只有继承IDeviceWriter即可,而不用修改BusinessObject:

public class FloppyWriter implement IDeviceWriter{
  public void saveToDevice(){
      //实际存储至Floppy的方法
  }
}
public class UsbDiskWriter implement IDeviceWriter{
  public void saveToDevice(){
    //实际存储至USB的方法
  }
}
     从这个角度看,Dependency Inversion的意思即是方法不依赖于实现,而是方法与实现都要依赖于抽象。

     IoC的Control是控制的意思,其背后的意义也是一种依赖关系的转移,如果A依赖于B,其意义即是B拥有控制权,想要转移这种关系,所以依赖关系的反转即是控制关系的反转,由控制关系的转移;可以获得组件的可重用性,在上面的Java方法中,整个控制权从实际的FloppyWriter转移至抽象的接口IDeviceWriter上,使得BusinessObject、FloppyWriter、UsbDiskWriter这几个实现依赖于抽象的IDeviceWriter接口。
    方法的业务逻辑部分应该是可以重用的,不应受到所使用框架或容器的影响,因为可能转移整个业务逻辑到其他的框架或容器,如果业务逻辑过于依赖容器,则转移到其他的框架或容器时,就会发生困难。

      IoC在容器的角度,可以用一句话来说明——“Don't call me, I'll call you”,就是“不要向容器要求所需要的(对象)资源,容器会自动将这些对象给你!”。IoC要求的是容器不侵入方法本身,而方法本身提供好接口,容器可以透过这些接口将所需的资源注入至方法中,方法不向容器主动要求资源,所以不会依赖于容器的组件,方法本身不会意识到正被容器使用,可以随时从容器中脱离转移而不用作任何的修改,而这个特性正是一些业务逻辑中间件最需要的。


105、LLC谐振变换器的LTspice仿真建模 文章摘要:本文分享了LLC谐振变换器在LTspice中的仿真建模经验。作者从实际调试中炸管的教训出发,指出数学计算无法捕捉瞬态问题,必须通过仿真验证。详细介绍了半桥LLC主电路搭建、理想元件选择、开环增益扫频、闭环控制实现等关键步骤,重点讲解了启动过程、ZVS验证和短路保护等高风险工况的仿真技巧。文章提供了实用参数设置建议和LTspice代码片段,强调先开环后闭环的调试顺序,并提醒仿真结果需保留20%设计裕量。最后总结了谐振电流波形观察、死区时间优化等经验性建议。 阅读详情

相关推荐

Maven证书信任危机:PKIX path building failed的全面解析与实战修复

本文全面解析了Maven构建中常见的`PKIX path building failed`证书验证错误。该错误通常在使用特定镜像仓库或自建仓库时,因SSL/TLS证书不被JDK默认信任而触发。文章深入剖析了错误根源,对比了临时忽略检查与永久导入证书等不同修复方案的安全性与适用场景,并推荐通过`keytool`将证书导入JDK信任库的根治方法,以保障构建安全与稳定。

zzz56的博客 506

IoC(Inversion of Controller)控制反转

IoC控制反转相关概念理解

SUN19980421的博客 360

【腹腔镜数据集】Cholec80+CholecSeg8k2020+Endoscapes2024

计算机辅助手术的发展旨在提高手术的正确性和安全性。然而,研究人员和工程师却面临着开发和训练更好算法所需的注释数据有限的问题。因此,同步定位与建图(SLAM)等基础算法的发展受到限制。基于Cholec80数据集,从Cholec80中的17个视频片段中提取了8,080个腹腔镜胆囊切除术图像帧,对图像进行注释并向公众发布。该数据集名为 CholecSeg8K。这些图像中的每一个都以十三个类别的像素级注释,这些类别通常在腹腔镜胆囊切除术中发现。

Toky_min的博客 2020

控制反转IOC-inversion of controller

原始场景: 一个行李箱的构建需要从轮子开始做起,如图所示: Created with Raphaël 2.2.0行李箱箱体底盘轮子 原来的代码可能是这样的:(代码不严谨,只是为了展示,望不计小节) public class luggage{ luggage{ this.frame = new frame(); } } public class frame{ frame(){ this.bottom = new bottom(); } } public class bottom{ bot

薯饼的博客 177

从零开始安装pytorch(包含GPU和CPU版本的安装)

Pytorch是。

qiaoxinyu1989的博客 8万+

SpyGlass Lint脚本实战:如何用TCL自动化RTL代码检查(附完整配置模板)

本文详细介绍了如何利用TCL脚本实现SpyGlass Lint工具的自动化RTL代码检查。通过构建模块化、工程化的脚本框架,文章提供了从环境搭建、核心配置、规则定制到豁免管理的完整实战指南,并附有可复用的配置模板,旨在帮助IC设计工程师构建高效、一致的代码质量检查流水线。

weixin_29204205的博客 134

设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)...

  参考链接: 依赖注入(DI) or 控制反转(IoC) laravel 学习笔记 —— 神奇的服务容器 PHP 依赖注入,从此不再考虑加载顺序 名词解释 IoC(Inversion of Controller) 控制反转(概念) DI(Dependency Inject) 依赖注入(IoC概念中的一种类型实现)通过依赖声明自动实例化依赖的类(通常通过反射实现) Containe...

Tinywan 401

Android图形系统(三)系统篇:渲染/合成的底层原理浅析

众所周知,渲染工作是由GPU负责,那么在聊GPU之前首先得知道什么是“渲染”?我们来举个例子感受一下在系统中申请一块10*101、把图层背景这玩意染成绿的2、从左上(0,0)到右下(10,10)画一条宽度为1颜色为红色的直线3、以坐标点(5,5)为中心,画一个半径为3的实心圆,颜色要蓝色好了,接下来操作系统会把这些“绘图指令”同步给GPU去执行渲染任务图片来源:自己画的GPU完成渲染工作后,我们将会得到一个大小为10*10二维数组,数组中的每个元素都保存着坐标点的颜色信息、深度信息。

1358

Spring从IOC(Inversion of Control:控制反转)开始

Spring从IOC(Inversion of Control:控制反转)开始 引用 有的时候变的茫然了,不知道前方的路该怎么走;有的时候变的颓废了,不知道从前的你过的还是否开心;有的时候理解和包容同在,我愿意做一个更出色的男人。辗转反侧通往成功的大门还需要多少力气敲开,于是静下心来回顾与内省。Spring是不是个好东西我不知道,但当大家都在推崇的时候,那么即使再默然,也应该警醒,即便大家不一定

_高sir的博客 461

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 997

基于STM32LXXX的模数转换芯片ADC(CMS24AD2001)驱动C程序设计

/ 电压 = (原始值 / 2^23) * Vref (注意:24位有符号数范围为 -2^23 到 2^23-1)//---------------- 硬件端口映射 (请根据实际电路修改) ----------------ADC_SCLK_HIGH();- PGA 放大倍数可选:1、2、4、8、16、32、64、128、256;//---------------- 宏定义操作 -------------------//---------------- 函数声明 -------------------

myron6688的博客 161

设计模式:反向控制和依赖注入(Inversion of control and Dependency injection)

When we see around, architectures mainly discuss about loose coupling , scalability , performance etc etc. Many architecture forget one of the important aspects in software is making application globa

上步七星 1008

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4735

编程思想: 控制反转(Inversion of Control - IoC)

本文参考PHP开发框架phalcon的文档1. 它从一个简单的例子出发, 描述了编码中遇到的一系列问题, 然后一步步去解决, 最后得到一个解决方案. 在这个例子中我们了解到: 一种设计模式: 依赖注入(Dependency Injection) 控制反转是什么? 控制反转是为了解决什么问题? 在这个例子中, 我们要写一个类SomeComponent来实现某个功能. 由于它依赖连接数据库, 我们...

胡拉哥 474

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深入理解 IoC(Inversion of Control,控制反转)容器是掌握现代软件开发中依赖注入(Dependency Injection, DI)和其他松耦合设计模式的关键

IoC(控制反转)IoC 是一种设计原则,核心思想是将对象的创建、依赖管理和生命周期控制从对象自身“反转”到外部框架或容器。对象不再主动创建或查找依赖,而是由外部注入。依赖注入(DI)是 IoC 的一种实现方式,通过 IoC 容器实现。IoC 容器IoC 容器是一个框架或库,负责:注册:定义类型(接口或类)与实现之间的映射关系。解析:根据注册规则创建对象并注入依赖。生命周期管理:控制对象的生命周期(如单例、瞬态、作用域)。依赖解析:自动解析对象依赖链(如 A 依赖 B,B 依赖 C)。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 970

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

依赖注入(Dependency Injection,简称 DI)是一种设计模式,广泛应用于现代软件开发中,用于实现控制反转(Inversion of Control,IoC),以降低模块之间的耦合度

/ 日志服务接口// 日志服务实现message// 日志服务接口 public interface ILoggingService {} // 日志服务实现 public class LoggingService : ILoggingService {} }依赖注入通过将对象的依赖管理交给 IoC 容器,实现了低耦合、高可测试性和高扩展性的设计目标。在 Prism 框架中,依赖注入通过和实现,支持服务注册、解析和模块化开发。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 911

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PHP依赖注入简单理解

<?php //依赖注入(Dependency injection)也叫控制反转(Inversion of Control)是一种设计模式 //这种模式用来减少程序间的耦合。 //假设我们有个类,需要用到数据库连接,我们可能这样写 class UseDataBase{ protected $adapter; public function __construct(){ $

yiqitony的专栏 1096

浅析依赖注入

菜鸟D曾经的一个项目使用的是Spring.Net框架,是将java的Spring框架移植到.Net平台上来。但是它的核心思想没有发生什么变化,依然是——依赖注入和控制反转。 老规矩,说一下依赖注入和控制反转的通用定义: 依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能...

weixin_30670925的博客 73

反转控制(IOC)与依赖注入(DI)

前言 今天补充了一下有关设计模式的知识,IOC(Inversion Of Control)以及DI(Dependency Injection)的总结,百度百科上的已经很好了,直接搬过来用吧! 附上链接  http://baike.baidu.com.cn/view/1486379.htm?fromId=1800021 起源 早在2004年,Martin Fowler就提出了“哪

Solidfish的专栏 1527

Laravel 4 IoC Container

IoC stands for Inversion of Control, and it is effectively just a fancy way of describing a concept in Object Oriented programming where the logic behind how you instantiate a class is abstracted in

Mount_DU的专栏 1345

Struts2中一些重要概念的理解

1.Inversion of Control Containers and the Dependency Injection pattern 这个站点是对struts2中控制反转和依赖注入讲解最好的一篇文章。可惜是英文的。

zf900901298的专栏 732

详解依赖注入和控制反转

详解依赖注入和控制反转(通俗易懂) 逛完各大贴吧后,一时觉得自己又行了,用自己的理解在这里说一下依赖注入和控制反转

m0_73326427的博客 588

Spring依赖注入与控制反转理解

一.什么是依赖注入和控制反转? 控制反转:即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。 依赖注入:基本原则是:应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由IoC容器负责,“查找资源”的逻辑

赵树祥的博客 1083

【转载+整理】什么是依赖注入(也即控制反转)?

  原文地址:http://blog.youkuaiyun.com/taijianyu/article/details/2338311/ 一、名词解释 依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。 具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用...

weixin_34062329的博客 74

(二)Spring的IOC&DI概述

•IOC(Inversion of Control): 其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式 •DI(Dependency Injection) — IOC

a1034386099的博客 322
上一篇: 理解socket的本质
下一篇: Eclipse Plug-in dependencies – Required Bundle vrs. Import-Package
qjpcpu
博客等级 码龄15年 59粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值