第一次看到ICO,估计很多人都处于懵逼的状态,感觉很抽象。 提到IOC可能想到的下一个词语就是DI

IOC:控制反转

DI:依赖注入

那么什么是控制反转呢?

我以前对这个概念也很模糊,最近在知乎上看到一个帖子https://www.zhihu.com/question/23277575,解释通俗易,有兴趣可以看看。

我觉得可以这么解释,其实淘宝就是一个依赖注入的例子,有三个角色:顾客、淘宝(第三方平台)、商户。我们需要买产品,商户需要卖产品,我们不需要去找商户,同样商户也不用来找用户,我们不需要直接交易。对于我们来说,只需要关注自己要买什么,然后去淘宝找需要的产品,然后下单就可以了。顾客和商户互相不依赖,只有在进行交易的时候,才会产生联系。淘宝在这里的角色就是一个第三方,顾客和商户中间的一些交集是淘宝在做。

什么是依赖注入?

目前我在开发中用到的是:比如我们定义了一个接口,我们需要实现这个接口,实现完了之后我们需要告诉程序,他们俩中间的绑定关系,这时候进行的操作就是注入了。

IOC和DI的关系?

IOC和DI是两个核心概念,控制反转是目的,依赖注入是实现控制反转的手段。不要混为一谈,他们不一样,可能有些人会有一些误解,觉得他们是一个东西(以前我就是这么认为的)。

以上均为个人理解,不喜勿喷,有问题可以指出,欢迎指导。

关于ICO的一些理解的更多相关文章

  1. Ico初步理解

    Ico定义:是一个重要的面向对象编程的法则来削减计算机程序的耦合问题(解耦).通俗理解:把运行中程式的控制权从程式本身那里拿过来,放到配置文件中,通过"反射"找到匹配配置文件总的对 ...

  2. 关于favicon.ico,shortcut icon,icon

    引入一篇文章.关于favicon.ico二三事. http://www.cnblogs.com/LoveJenny/archive/2012/05/22/2512683.html 一直对favicon ...

  3. webpack入门和实战(二):全面理解和运用loader和plugins

    您的阅读目录: 一.理解webpack加载器loader 二.理解less-loader加载器的使用 三.理解babel-loader加载器的使用 四.webpack命令行常见使用的操作 五.用web ...

  4. 图解 CSS: 理解样式表的逻辑(转载)

    原文:http://www.cnblogs.com/del/archive/2009/02/01/1382141.html 样式表可以是外部的.内联的或嵌入的; 链接外部样式文件一般是:<lin ...

  5. 深入理解css中vertical-align属性

    一.为什么要写这篇文章 今天看到一个问题: 两个div 都设置 display:inline-block,正常显示:但是在第二个div中加一个块级元素或者内联元素,显示就变了个样,为什么? <m ...

  6. 看得懂的区块链,看不清的ICO人心

    比特币又开始下跌了,是狂欢尽头还是又一波调整,无从得知,背后的乱象会让监管者继续心烦,而这乱象对我来说,有时候会有些心寒. 你说我怎么可能想到,我一个写程序的人,突然有一天会发现,朋友圈里有一些搞技术 ...

  7. 如何通过以太坊智能合约来进行众筹(ICO)

    前面我们有两遍文章写了如何发行代币,今天我们讲一下如何使用代币来公开募资,即编写一个募资合约. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还 ...

  8. Less与TypeScript的简单理解与应用,并使用WebPack打包静态页面

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 创建空项目 使用Less 使用TypeScript 使用WebPack 开始写项目 总 ...

  9. 从Java角度理解Angular之入门篇:npm, yarn, Angular CLI

    本系列从Java程序员的角度,带大家理解前端Angular框架. 本文重点介绍Angular的开发.编译工具:npm, yarn, Angular CLI,它们就像Java在中的Maven,同时顺便介 ...

随机推荐

  1. 使用lightProbe来模拟动态物体的照明shader

    VertexLit path中读取lightProbe烘焙信息: Shader "VertexLitProbe" { Properties { _MainTex ("Ba ...

  2. 操作argc, argv的经典写法

    [问题] 我在看boost源代码的时候看到如下的代码, template<class charT> basic_command_line_parser<charT>:: bas ...

  3. Spring AOP获取拦截方法的参数名称跟参数值

    注意:这种方式需要JDK1.8版本支持 开始:http://www.cnblogs.com/wing7319/p/9592184.html 1.aop配置: <aop:aspectj-autop ...

  4. Android性能优化-减小图片下载大小

    原文链接 https://developer.android.com/topic/performance/network-xfer.html 内容概要 理解图片的格式 PNG JPG WebP 如何选 ...

  5. WPF如何为程序添加splashScreen(初始屏幕)

    一.考虑到大部分的splashscreen其实都只是一个图片,所以最简单的做法是,先导入一张图片,然后设置它的生成操作为“splash screen” 二.通过程序设置SplashScreen pub ...

  6. Python机器学习(1):KMeans聚类

    Python进行KMeans聚类是比较简单的,首先需要import numpy,从sklearn.cluster中import KMeans模块: import numpy as np from sk ...

  7. tmux 共享窗口大小

    http://www.cnblogs.com/bamanzi/p/tmux-share-windows-between-sessions.html

  8. Zabbix agent 在windows上安装部署

    Zabbix agent 在windows上安装部署 1.下载与解压 地址: http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win ...

  9. 基于vue-cli项目添加服务端渲染

    两个示例的git地址: 1. 我的环境 2. 方式一:使用prerender-spa-plugin插件获得SSR的效果. 2.1 说明 2.2 初始化 1 vue init webpack vue-p ...

  10. 【Spark 深入学习 07】RDD编程之旅基础篇03-键值对RDD

    --------------------- 本节内容: · 键值对RDD出现背景 · 键值对RDD转化操作实例 · 键值对RDD行动操作实例 · 键值对RDD数据分区 · 参考资料 --------- ...