`
M_ittrue
  • 浏览: 76976 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

IOC设计模式的理解

阅读更多
  IOC全称是Inversion of Control,即反转控制,或者说是依赖注入更为合适。选择别纠结这些全称的专业词。我们可以用别外一些方式去理解它,IOC,是一种设计模式。它的延生所要实现的是把藕合从代码中移出去,统一放到XML文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。

    IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实 际的应用程序代码分开。其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
   看了这些,头晕没?

   没关系,继续。IOC中最基本的Java技术就是“反射”编程,至天反射机制,可以查看我的另一篇《java中的反射机制》.如果你理解了反射,你就知道,IOC,就是为了动态的创建对象,而不是在代码中写死去生成某一种特定的对象。通过IOC模式,我们可以通过改变XML上的配置文件,去改变各种的依赖关系。每当IOC容器去读取XML文件后,就会根据给出了的类名来生成对象。所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

下面来说说IOC的缺点吧,了解其缺点可以更进一步的了解其用法。
  1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象 生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3) 缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

  说了那么多,都晕了吧。呵呵,再坚持一下啊,我们胡老师给我们讲的时候,我们也是这样的啊,可是,下面是大家最想看的嘛,嗯,下面是一些代码的附助讲解。
/*
 * 
 */
public interface IVehicle {

	 public void startMe();//启动
	 public int forward(int dins);//前进
	 //有多少油
	 public int getEnergy();
}

//这就是核心代码....哈哈,别失望啊,是的,就是这么点代码。
	public static IVehicle createIVehicle(String className){
		try{
			IVehicle v = (IVehicle)Class.forName(className).newInstance();//这一句,在说到反射的时候就提过了,现在再出现,足可见其重要性,我确实感觉到其强大,只要给我一个存在的类名,我就可以返回你一个实例,有了实例,你想操作什么都行哦`
			return v;
		}catch(Exception ef){
			ef.printStackTrace();
		}
		return null;
	}


  下面再讲讲IOC模式的三种注入,包抱Setter注入,构造注入(代理对象),以及接口注
由于Spring并不支持接口注入,而我们接下来的项目将用到Spring这种实现了IOC模式的容器,所以,接口注入就不说了,想知道的话,baidu,google,bing都行。
[
//构造注入
class BigBm implements IVehicle{
	private IVehicle v;
	//带参构造器,每创建一个BigBm对象,就必须传入一个IVehicle对象
    public BigBm(IVehicle v){
    	this.v = v;
    }
    
	 public void startMe(){
		 System.out.println("启动了..");
		 v.startMe();
	 }
	
	 public  void test(IVehicle v){
		 BigBm b = new BigBm(v);
		 b.startMe();
	 }
}


//Setter注入
public class classA{
	private classsB b;
	public void Setter(classsB b){
		this.b = b;
	}
	public void doSomething(){
		
		System.out.println("注入了!!");
	}
}

public class classB{
	
}

public class text{
  	
	public static void main(String args[]){
		classB b = new classB();
		classA a = new classA();
		a.Setter(b);
		a.doSomething();
	}

}
分享到:
评论
2 楼 3258964 2017-12-18  
若不理解,可参考
http://www.srccode.cn/a_6.html 中的图片解释
1 楼 luhouxiang 2015-11-17  
最后的示例代码有点怪,BigBm 这个根本没用到classA classB与之前的没关系啊,望指教

相关推荐

    Android应用开发中控制反转IoC设计模式使用教程

    【Android应用开发中控制反转IoC设计模式使用教程】 IoC(Inversion of Control,控制反转)是一种设计模式,常被称为依赖注入(Dependency Injection,DI)。在Android应用开发中,IoC模式能够显著降低组件之间的...

    Spring IOC设计原理解析.docx

    IOC,即控制反转,是软件设计模式中的一种,它将对象的创建和管理权交给了框架,而不是由对象自身负责。DI(Dependency Injection,依赖注入)是IOC的一种具体实现方式,它允许开发者在不修改代码的情况下改变对象间...

    Android 设计模式 示例集合 以及IOC注解事例 Demo

    这个压缩包中的示例集合对于开发者来说是一个宝贵的资源,通过学习和实践这些示例,可以更好地理解和运用设计模式,同时掌握如何在Android项目中有效地使用IOC注解来管理依赖,提升代码的可维护性和可测试性。

    IOC模式 c#经典例子

    IOC(Inversion of Control,控制反转)模式是一种软件设计原则,它在面向对象编程中用于解耦组件之间的依赖关系。C#中实现IOC的一种常见方式是通过依赖注入(Dependency Injection,DI)。在这个“IOC模式 c#经典...

    IOC详解IOC详解IOC详解IOC详解

    控制反转(IOC,Inversion of Control)是一种设计模式,它在软件工程中被广泛应用,特别是在Java开发中。IoC的核心思想是将对象的创建和管理权交给一个外部容器,而不是让对象自行创建和管理依赖。这有助于降低耦合...

    IoC 容器和Dependency Injection 模式

    依赖注入(DI)是一种设计模式,它实现了 IoC 的思想。在 DI 中,组件不再直接创建其所依赖的对象,而是将这些依赖作为参数传递进来。这种方式有多种实现形式: 1. **构造函数注入**(Constructor Injection):...

    Spring控制反转(IoC)的理解

    IoC是一种设计模式,它将对象的创建和管理从应用代码中解耦出来,使得系统更易于维护和扩展。在传统的编程方式中,对象之间的依赖关系通常是硬编码在类内部,而在IoC模式下,这些依赖关系由外部容器来管理,从而降低...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    李建忠先生的“C#面向对象设计模式纵横谈”系列讲座,通过对不同设计模式的深入剖析,帮助开发者更好地理解和应用这些模式。在第25讲中,他集中对整个系列进行了一次全面的总结,让我们一起来回顾和探讨这些设计模式...

    工厂模式的测试并有spring ioc的简单实现

    在软件设计模式中,工厂模式是一种非常基础且实用的创建型模式,它的主要目标是将对象的创建过程封装起来,使得代码更加灵活,易于扩展。工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂...

    利用Java的反射与代理实现IOC模式

    IOC模式是一种设计模式,它将对象的创建和依赖关系的管理从代码中分离出来,使系统更加灵活、可维护和可测试。在这个主题中,我们将深入探讨Java反射和动态代理如何帮助我们实现IOC。 首先,让我们理解Java反射。...

    自己实现ioc实例demo

    在IT行业中,依赖注入(IOC,Inversion of Control)是一种设计模式,它使得应用程序的组件之间解耦,提高了代码的可测试性和可维护性。在这个“自己实现ioc实例demo”中,我们将探讨如何通过XPath解析XML文件来实现...

    IOC和AOP深刻理解基础代码测试

    Spring框架是实现这两种设计模式的典型代表,下面我们将深入探讨这两个概念及其在实际代码测试中的应用。 首先,让我们来看看IOC,它是一种设计原则,核心思想是将对象的创建和管理权交给外部容器,而不是由对象...

    ioc模式与工厂模式的比较[借鉴].pdf

    在软件开发领域,IOC(Inversion of Control,控制反转)模式和工厂模式是两种常见的设计模式,它们在解决对象创建和依赖关系管理方面各有特点。本文主要探讨这两者之间的区别和联系。 首先,IOC模式的核心思想是将...

    ASP.NET设计模式-杨明军译(源码)

    《asp.net设计模式》涵盖了开发企业级asp.net应用程序的知名模式和最佳实践。本书用到的模式可以用于从asp.net1.0到asp.net 4.0的任何版本。不必管模式本身所用的语言,可以将模式用于任何面向对象编程语言。  ...

    设计模式java

    使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。很多模式在Java等面向对象的编程语言中得到了广泛的应用。在本文中,将会介绍一些在Java中常用的设计模式,并结合Java的特性加以讨论。 ...

    设计模式-C # 经典设计模式

    首先,我们需要理解设计模式的基本概念。设计模式是由Christopher Alexander提出的,它描述了在软件设计中经常遇到的问题和解决这些问题的标准方法。尽管“设计模式”这个词在不同领域都有应用,但在软件行业中,...

    绝对深层次IOC和AOP的理解

    实现IOC的主要设计模式是工厂模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在IOC中,Spring充当了高级工厂的角色,根据配置动态地创建和装配对象。Spring容器会根据配置信息创建Bean,并...

Global site tag (gtag.js) - Google Analytics