IOC给程序带来的好处

IOC(inversion of control)的中文解释是“控制反转”或者“依赖注入”,它的实现目的是:我们可以通过配置文件来控制程序的流程,达到程序代码的优化。初学者往往弄不清楚为什么我们可以通过“控制反转”或“依赖注入”来优化我们的代码。今天我想借这个机会说说我对IOC程序设计原则的认识,以及它是怎么样把我们的程序弄“活”的。
一、名词解释 
首先我想说说我对“控制反转”和“依赖注入”的认识。
     1、控制反转:
     对于初学者来说,我们平时写代码,“一段代码会完全控制了程序的流程”,因为我们习惯于用new关键字来创建对象,再通过对象来调用它的方法。对于我们来说,这是再正常不过的了,可是如果此时我们的需求发生了一点改变,我们就不得不修改源代码,这就是我们常讲的“硬编码(hard-coding)”,而修改源代码是程序设计的大忌,这违反了程序设计的“开闭原则”,即对扩展是开放的,对修改是关闭的。

Java代码

  1. //代码示例:
  2. public class Animal {
  3. public void eat() {
  4. System.out.println(" 动物 吃东西了!");
  5. }
  6. }
  7. public class Pig extends Animal{
  8. public void eat() {
  9. System.out.println(" 小猪 吃东西了!");
  10. }
  11. }
  12. public class Dog extends Animal {
  13. public void eat() {
  14. System.out.println(" 小狗 吃东西了!");
  15. }
  16. }
  17. public class Project {
  18. public static void main(String[] args) {
  19. Animal pig = new Pig();
  20. pig.eat();
  21. }
  22. }

当我们写完代码时,我们的程序只能执行小猪吃东西,可是如果此时需求要求我们要小狗吃东西,是不是我们的代码又要变了呢。此时我们引入了配置文件,我们事先在配置文件中已经配置好了该是谁吃东西,等到程序运行时,程序会读取配置文件中的值通过反射机制创建一个我们需要的对象,再调用它的eat方法就ok了。这样看来,我们程序的执行流程控制权是不是转交给了配置文件了呢,而程序代码自己却成了被控制的对象,这就是实现了“控制反转”了。
      2、依赖注入:
在讲依赖注入之前,我想先讲一讲依赖注入的三种实现方式。
(1)构造注入, 是通过构造器方法注入实例变量

Java代码

  1. public class Car {
  2. public void move(){
  3. //????
  4. }
  5. }
  6. public class People {
  7. private Car car;
  8. public People(Car car) {//构造注入
  9. this.car=car;
  10. }
  11. public void move(){
  12. car.move();
  13. }
  14. }

(2)设值注入,是通过setter方法注入实例变量

Java代码

  1. public class People {
  2. private Car car;
  3. public People(Car car){//构造注入
  4. this.car=car;
  5. }
  6. public void setCar(Car car) {//设置注入
  7. this.car = car;
  8. }
  9. public void move(){
  10. car.move();
  11. }
  12. }

(3)接口注入,是通过接口方法注入实例变量

Java代码

  1. public interface AbstractCar {
  2. public void move();
  3. }
  4. public class Car {
  5. public void move(){
  6. System.out.println("车开了");
  7. }
  8. }
  9. public interface AbstractPeople {
  10. public void move();
  11. }
  12. public class People {
  13. public void move(AbstractCar car){//接口注入
  14. car.move();
  15. }
  16. }

问题思考:依赖注入有什么作用呢?
      此时我们还无法回答这个问题,可是当我们考虑到配置文件时,我们就豁然开朗了,不管是哪种注入方法,目的都是给我们的程序传入一个实例变量。而这个实例变量我们可以事先在配置文件中配置,当程序运行时就可以读取配置文件,通过反射机制来创建所需的对象了,如果此时我们的需求发生了变化,我们也只需改一下配置文件就ok了。这里有些人可能会认为这也修改了文件呀,为什么修改配置文件就可以了呢。呵呵,其实配置文件是不需要编译的,我们可以随时修改配置文件,而不需要通过更改一行源代码的方法就实现了程序流程的控制。这就是ICO的妙处哦~
      3、IOC容器
使用IOC后,我们不需要自己去创建某个类的实例,而由IOC容器去创建,当我们需要使用某个对象时,直接到容器中去获取就可以了。现在已经有许多非常优秀的IOC容器,比如spring等。
 二、综合理解 
       最后我想用一个图来表示我对IOC的理解

转自:http://weixiaolu.iteye.com/blog/1244865

时间: 2024-12-09 11:52:51

IOC给程序带来的好处的相关文章

小程序能为实体商户带来什么好处?小程序能为企业提高收益吗|极限工坊淘小咖

从传统的互联网时代产生新浪,网易,搜狐等三大新闻门户,到电商时代的阿里,京东,苏宁易购等电商巨头,再到移动互联网APP时代的滴滴,美团,饿了么等移动超级入口,公众号时代的全民自媒体时代. 如今是小程序的时代,有一次让所有人站在了同一起跑线,小程序一直为誉为:实体店实现互联网化的希望之光.每家企业商户都需要一个小程序来进行提前布局,抢占市场先机. 极限工坊淘小咖为大家总结下小程序到底能为实体店带来哪些好处? 1.帮助实体店提升运营效率 小的百货.餐饮店使用上小程序,可以弥补渠道管理.人力管理上的不

控制反转和spring在项目中可以带来的好处

Spring实例化Bean的三种方式分别是: 1,xml配置使用bean的类构造器 <bean id="personService" class="cn.service.impl.PersonServiceBean"></bean> 2,xml配置+factory类,使用静态工厂方法实例化 <bean id="personService2" class="cn.service.impl.PersonServ

了解 Oracle Berkeley DB 可以为您的应用程序带来 NoSQL 优势的原因及方式。

将 Oracle Berkeley DB 用作 NoSQL 数据存储 作者:Shashank Tiwari 2011 年 2 月发布 “NoSQL”是在开发人员.架构师甚至技术经理中新流行的一个词汇.尽管这个术语最近很流行,但令人惊讶的是,它并没有一个普遍认可的定义. 通常来说,任何非 RDBMS 且遵循无模式结构的数据库一般都不能完全支持 ACID 事务,并且因高可用性的承诺以及在横向伸缩环境中支持大型数据集而普遍被归类为“NoSQL 数据存储”.鉴于这些共同特征(与传统的 RDBMS 的特征

做小程序有哪些好处????今天给大家普及一下

常说微信小程序怎么样怎么样,但对于大多数的用户而言,小程序能给自己带来什么好处,仍然是一个问题.今天,小橙序之家和你说说使用微信小程序,能带来什么好处? 节省手机内存空间小程序无需安装最大的特点就是能够帮用户节省宝贵的手机内存空间,市场上常用的App安装包基本上都是几十M,随随便便安装一个软件就会占用上百M的内存,甚至一些大的App(如QQ.微博.今日头条.爱奇艺等),安装使用后分分钟会占用内存 500M+.常用App的安装和使用过程中会占用大量的内存,不常用的App安装后也会占用内存,如123

mes系统为企业带来多少好处?

由于MES系统反映了作业人员.机器.设备.物料和工具等资源的使用状态的实时信息,并就刚刚完工的作业活动向ERP和有关人员报告.因此,使用其中的资源状态管理功能,MES除能及时提供更详实的资源可用量信息,以便于向ERP进行更可行的资源计划,同时,也使有关人员不仅可及时了解到作业效率,资源效率等实际状况,还可以对作业中隐藏的问题,运作效率改善等进行及时的处理和更正. 通过生产单元分配功能的使用,MES能将生产产品的原物料连同作业指令一起送达相应的加工单元,以指令开始一个工序或工步的操作,极大地提高了

单页web应用是什么?它又会给传统网站带来哪些好处?

什么是单页应用? 单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面.像所有的应用一样,它旨在帮助用户完成任务,比如"编写文档"或者"管理Web服务器".可以认为单页应用是一种从Web服务器加载的富客户端. 单页应用给传统网站带来的好处? 相对于传统网站,我们认为单页应用的主要好处是: 它提供了更加吸引人的用户体验.单页应用可以做到一举两得:桌面应用的即时性和网站的可移植性和可访问性. 单页应用可以和桌面应用一样渲染-单页应用只需要重绘界面上需要变化的

CRM客户关系管理系统能够为企业带来什么好处?

CRM客户管理系统给企业带来的好处是可以肯定的,那到底使用CRM有什么意义,根据个人使用CRM客户管理系统的经验,总结出以下几个使用CRM的好处: 提升了企业认识客户的能力 企业的一切营销活动必须紧紧围绕"以市场为导向,以客户为中心"这个主线.企业只有将客户真正重视起来,把客户关系管理提高到企业战略层面上考虑,才可能成为以"客户为中心"的现实受益者.CRM系统的价值正在于此,实时的数据录入,多维度的数据记录,让企业对客户的认识有了整体的提高. 规范企业流程 通过CR

逸管家:共享消费会给消费者带来什么好处?

? 共享销售会给消费者带来什么好处? 随着"互联网+"时代商业模式的深入,新一波的共享经济浪潮不断席卷全球.在 2015 年的达沃斯论坛上,×××总理就提出,全球已进入"分享经济时代",利润分享模式将产生很大的变化,即便是消费者亦可享有分润收益,成为一名"消费商". 目前全球分享经济呈快速发展趋势,成本小,速度快,众人创富,形成财富合理的分配格局.可以预见,消费者成长为消费商,将是一场浩大的革命!这场革命将彻底颠覆我们的商业模式! "消

大前端 前后端分离带来的好处

大前端 前后端分离带来的好处:1. 前后端分离开发,相互之间的影响很小2. 使用 webpack,模块化打包前端代码3. 在开发时,可以做到代码热替换,可以使用 babel,可以使用 css 预处理器等等4. 打包时,打包代码的同时还可以做到按需加载代码,静态文件地址自动写入 html 标签,压缩 css.js 代码.压缩图片5. NPM 管理依赖 除了享受不到前后端分离的优点外,还会1. 放弃 ES6,只能写 ES5 以下版本的代码,且要自己处理一些兼容问题2. 不能够使用 A.R.V 三大框