[Object-oriented] : 控制反转

 

前言 :

参加点部落的活动,关于IoC(控制反转)大家有很多的讨论。
本文排除对象生成的部份,单纯解释IoC为甚么叫做控制反转。
本篇文章以之前写的 [Object-oriented] : 重用内容来举例。

 

未IoC之前的对象图 :

很明显的
左边的组件A,相依右边的组件B。
左边的对象,相依右边的对象

image

public class Robot
{private Car _car = null;public Robot(Car car){_car = car;}public void Work(){_car.Run();}
}public class Car
{public void Run(){}
}

 

IoC之后的对象图 :

很清楚的看到,组件A不再相依组件B。
反倒是组件B为了继承ICar接口,相依了组件A。(物件也是相依性反转)

image

public class Robot
{private ICar _car = null;public Robot(ICar car){_car = car;}public void Work(){_car.Run();}
}public interface ICar
{void Run();
}public class Car : ICar
{public void Run(){}
}

 

后记 :

由上面的范例来看,
很明显的对象的相依性方向改变了。
还有组件的相依性方向也改变了。

 

总的归纳起来。
狭义的说 : 在切割对象相依性的时候,可以采用IoC。
广义的说 : 在架构子系统或是应用层的时候,也可以采用IoC。
广广义的说 : ASP.NET把页面的内容,交由程序设计师去撰写,也是IoC的一种应用。
他是一种实现『切割相依性』、『重用上层,抽换下层』这些目的的模式。

 

IoC不是很新奇的技术,甚至跟各种面向对象技术、设计模式都有点部份重合。
但是主要是让我们在切割类别或是系统的时候,有个共同的名词。

 

另外补充,学习模式是用来帮助设计、分析跟学习。
学完了之后实际在工作上去实做, 等写到忘记这些模式名词,
并且可以组合出自己需要的模式,才算真的有到一个段落。
(怎么有点像倚天屠龙记的桥段...XD)

转载于:https://www.cnblogs.com/clark159/archive/2011/10/10/2205096.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、规则组织数学模型的建立

一、规则组织数学模型的建立 规则组织满足两个不变:1,组织点运动规律不变、2,飞数不变的单系统组织 即:若知道组织点运动规律和飞数即可确定唯一一个组织。 3上2下,组织循环数为325,经纱循环数纬纱循环数…

LeetCode 3:无重复字符的最长子串 思考分析

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”&#x…

e-r模型教案高中计算机,《ER模型1》[数据库][计算机]教案.doc

《ER模型1》[数据库][计算机]教案一、复习旧知识点1、数据库概念设计的意义是什么?2、概念设计的基本步骤是什么?二、明确学习目标1、E-R模型的基本元素2、属性的分类三、重点、难点E-R模型的基本元素基本属性和复合性四、讲授知识点,指导自学…

(译)利用ASP.NET加密和解密Web.config中连接字符串

介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, Ajax, JavaScript等的文章。大多数情况下,我都把数据库的连接字符串放在了web.config中。其中包…

lock_sh 示例_带有示例的Python date __str __()方法

lock_sh 示例Python date .__ str __()方法 (Python date.__str__() Method) date.__str__() method is used to manipulate objects of date class of module datetime. date .__ str __()方法用于操作模块datetime的date类的对象。 It uses a date class object and return…

美国人看见的是友情,中国人看见的是忠诚

美国人看见的是友情,中国人看见的是忠诚 这是一个人狗情未了的感人事件。 一个即将死去的人,总有未了的心愿难以割舍,来自美国的凯文麦克莱恩实现了他的临终愿望,而他的最后愿望就是与自己的爱犬见上最后一面。 现年57岁的凯文麦克…

PyCharm安装及配置

一、下载PyCharm和相关工具 qoi8 二、安装PyCharm 先不要运行PyCharm 三、将jar包放到PyCharm安装目录的bin文件夹下 三、找到pycharm64.exe.vmoptions和pycharm.exe.vmoptions配置文件 四、编辑这两个文件,在这两个文件最后一行加入下载好的jar包文件路径 -ja…

LeetCode 239:滑动窗口最大值 思考分析

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 进阶: 你能在线性时间复杂度内解决此题吗? 示例: 输入: num…

计算机论文范文1500,电子商务毕业论文范文1500字

电子商务毕业论文范文1500字时间稍纵即逝,充满意义的大学生活即将结束,毕业前要通过最后的毕业论文,毕业论文是一种有计划的检验学生学习成果的形式,那么问题来了,毕业论文应该怎么写?下面是小编为大家整理…

为什么要使用反射机制

1、反射的构造过程 直接构造 1、加载程序集 2、根据类名构造 反射构造 1、加载程序集 2、查找需要构造类的类名 3、根据类名构造 注意: 能不用反射还是别用反射,因为毕竟要以性能做为代价, 不过在某些特定场合,还是只能用它,所以要自己根据实际情况来…

java uuid静态方法_Java UUID timestamp()方法与示例

java uuid静态方法UUID类timestamp()方法 (UUID Class timestamp() method) timestamp() method is available in java.util package. timestamp()方法在java.util包中可用。 timestamp() method is used to return the timestamp linked with this UUID. timestamp()方法用于返…

ANT:编译SWC

编译SWC使用的是compc任务&#xff0c;compc需要几个重要的参数&#xff1a; 1、输出路径 2、包含的类 3、源路径 其中第2个参数是比较难拿到的&#xff0c;需要使用ANT的几个其他的方法来将路径转换了类的完整路径&#xff0c;先看完整的代码&#xff1a; <target name&quo…

ssm整合事务失效

<!-- 开启注解驱动的事务管理 --><tx:annotation-driven transaction-manager"transactionManager"/>原因&#xff1a;未开启spring事务驱动

五、规则组织的衍生组织——纬山形组织数学模型的建立

基础概念公式推到可参考该专栏下的前几篇博文。 纬山形组织图&#xff1a; 观察可知&#xff1a;纬山形组织图下半部分是右斜组织&#xff0c;上半部分是左斜组织。右斜和左斜按照垂直方向进行排列。 该图是一个2上3下2上1下(从最下面一行从左往右观看) 特点&#xff1a;每一…

批处理设置计算机不休眠,虚拟机状态下怎样设置电脑不休眠

签中&#xff0c;在“启用休眠”项打勾即可启用休眠功能。如果此项不可用&#xff0c;则说明你的电源不支持休眠功能。或如果你安装了还原精灵等一些保护软件&#xff0c;也无法启用休眠功能。2 打开电脑的休眠功能后&#xff0c;在“电源选项”的“电源使用方案”标签中&#…

HDU 2836 Traversal 简单DP + 树状数组

题意&#xff1a;给你一个序列&#xff0c;问相邻两数高度差绝对值小于等于H的子序列有多少个。 dp[i]表示以i为结尾的子序列有多少&#xff0c;易知状态转移方程为&#xff1a;dp[i] sum( dp[j] ) 1;( abs( height[i] - height[j] ) < H ) 由abs( height[i] - height[j] …

剑指 Offer 57 - II. 和为s的连续正数序列 思考分析

输入一个正整数 target &#xff0c;输出所有和为 target 的连续正整数序列&#xff08;至少含有两个数&#xff09;。 序列内的数字由小到大排列&#xff0c;不同序列按照首个数字从小到大排列。 示例 1&#xff1a; 输入&#xff1a;target 9 输出&#xff1a;[[2,3,4],[4…

java uuid静态方法_Java UUID compareTo()方法与示例

java uuid静态方法UUID类compareTo()方法 (UUID Class compareTo() method) compareTo() method is available in java.util package. compareTo()方法在java.util包中可用。 compareTo() method is used to compare two UUID objects or in other words, it is used to compar…

hdu 1214

找规律的题目。如果不是圆环形状的话&#xff08;也就是n个人排成直线&#xff09;&#xff0c;完全调换顺序需要(n-1)*n/2次交换&#xff1b;为环形的时候&#xff0c;可能不需要这么多&#xff0c;因为调换有了两个方向。我们记直线时n个人需要的交换次数为g(n)(n-1)*n/2&…

六、规则组织的衍生组织——纬向破斜组织数学模型的建立

基础概念公式推到可参考该专栏下的前几篇博文。 纬向破斜组织图&#xff1a; 下半部分(从左往右)&#xff1a;&#xff0c;3上2下2上1下&#xff0c;右斜&#xff0c;飞数为1 上半部分(从下往上)&#xff1a;&#xff0c;2上2下1上3下。左斜&#xff0c;飞数为-1 通过分析可…