依赖、耦合、解耦、控制反转(IOC)、依赖注入(DI)
随着net的深入学习,出现了很多概念性的东西需要理解,现在统一记录一下。
1.依赖:现阶段在任何一个有请求作用的系统,都会出现A类调用B类的情况,这时候A类就依赖于B类,A类和B类存在依赖关系。
2.耦合、解耦:A类依赖于B类,这时对B类调用,一般通过A a=new B();的形式,不过这个时候如果B类重构(例如:增加了一个参数param1),要保证A类的正确使用,则必须重新new:A a=new B(param1); 则此时A类和B类就是耦合关系。不过带来了很多的不方便之处,如果B类频繁变动,则A类也必须同步修改,所以这时候想到了解耦(即解除这种关系,B类变动A类不用处理,交给其他类处理)。
3.IOC(Inversion of Control 控制反转):有控制反转,应该也有控制 ‘正转’ 吧,可以用网上查到的一个形象例子说明:“我”充当一个入口类,在这个入口类中,我每次去吃饭都需要主动去买一双一次性筷子(每次使用都需要new一次),让筷子乖乖的到我手里来,是“我”控制了筷子。不过呢,在现实生活中,大部分人都是很懒的,我完全可以买一双精致的筷子放到容器中(IOC)中,每次要调用时,就向容器请求,容器通过“注入"的方式给我一双筷子,这个过程中,“我”就变为了请求方,而容器变为了控制方,控制关系发生了 反转。
4.DI(Dependency Injection 依赖注入)
同样接着上边的例子,筷子来到我手里的过程(即A类请求容器调用B类的过程)就是依赖注入。
注入大致分为 构造方法注入、接口或者抽象类注入 和 工厂方式注入。
(1).构造方法注入
public class B{
。。。
}
public class A{
B b;
public A(){
b=new B();
}
b.newattr="xxx";
。。。。
}
(2).接口或者抽象类注入
public interface ICommon{
void showMsg();
}
public class B:ICommon
{
public void showMsg(){
console.log("我是b类的方法");
}
}
public class A{
ICommon icommon=new B();
icommon.showMsg();
}
(3)工厂方式的注入和 (2)类似
。。。
依赖、耦合、解耦、控制反转(IOC)、依赖注入(DI)的更多相关文章
- java依赖的斗争:依赖倒置、控制反转和依赖注入
控制反转(Inversion Of Controller)的一个著名的同义原则是由Robert C.Martin提出的依赖倒置原则(Dependency Inversion Principle),它的 ...
- 依赖倒置原则DIP&控制反转IOC&依赖注入DI
依赖倒置原则DIP是软件设计里一个重要的设计思想,它规定上层不依赖下层而是共同依赖抽象接口,通常可以是上层提供接口,然后下层实现接口,上下层之间通过接口完全透明交互.这样的好处,上层不会因依赖的下层修 ...
- spring(3)------控制反转(IOC)/依赖注入(DI)
一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...
- Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)
关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...
- 控制反转IOC的依赖注入方式
引言: 项目中遇到关于IOC的一些内容,因为和正常的逻辑代码比较起来,IOC有点反常.因此本文记录IOC的一些基础知识,并附有相应的简单实例,而在实际项目中再复杂的应用也只是在基本应用的基础上扩展而来 ...
- ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下
先简单了解一这个几个 名词的意思. 控制反转(IOC) 依赖注入(DI) 并不是某种技术. 而是一种思想.一种面向对象编程法则 什么是控制反转(IOC)? 什么是依赖注入(DI) 可以点击下面链接 ...
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- [.net 面向对象程序设计深入](26)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)
[.net 面向对象程序设计深入](26)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...
- [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)
[.net 面向对象程序设计深入](31)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 “Inversion of Control”.依赖注入DI, 全称 “Dependency Injection”. 面向的问题:软件开发中,为了降低模块间.类间的耦合度,提倡基 ...
随机推荐
- java对redis的基本操作,ZZ
java对redis的基本操作 http://www.cnblogs.com/edisonfeng/p/3571870.html
- python内置类型:列表,包括 list 和 tuple
列表list 是一种有序的集合 ,假定list的名字为class list的元素个数:len( class) 访问元素: a. 索引从0开始 b. 也可以使用[-1],[-2],[-3] 从后面 ...
- selenium选择器_css属性选择器
搜索 <button class="btn-search tb-bg" type="submit" data-spm-click="gostr= ...
- Lua 语言变量
Lua 变量 变量在使用前,必须在代码中进行声明,即创建该变量.编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值. Lua 变量有三种类型:全局变量.局部变量.表中的域. ...
- php 添加环境变量
1.php添加环境变量主要为了能在 cmd和软件的客户端用php来运行 首先我们要做的第一步: 添加环境变量(记住php.exe的路径,然后再环境变量中编辑path 多个用逗号分隔开,保存重启电脑) ...
- ThinkPHP5.0源码学习之执行应用
一.应用启动 在/thinkphp/start.php文件中,用一句代码App::run()->send();实现应用的启动. // 执行应用 App::run()->send(); ...
- 禁止WORDPRESS站内搜索的方法
如果我们希望禁止站内搜索,毕竟会是的MYSQL负担加重,我们可以禁止掉,然后在使用第三方搜索组件.比如用百度站内搜索或者360站内搜索. function fb_filter_query( $quer ...
- php 安装redis
https://www.cnblogs.com/yuuje/p/8243234.html
- powerdesigner(数据设计工具)
https://jingyan.baidu.com/album/4f7d57120468c91a2019279f.html?picindex=1 (摘抄 原网地址)
- eclipse工具类及插件(Eclipse超好用的插件推荐)
https://blog.csdn.net/ghostxbh/article/details/80054948