其实,IoC主要分为2步:
1.控制反转-反向控制。以往的开发过程中,都是应用程序去调用系统的接口方法,比如调用系统library,这种做法的特点是,控制权掌握在应用程序手中。而控制反转就是在系统框架中,已经定义好了具体的操作模式,应用只需要实现部分借口就可以,所以这个控制流程掌握在框架手中。
与反向控制相对的是正向控制,如子类调用父类的方法,实现类调用系统库函数等
举例:
android中的框架中ActivityThread等已经定义好了activity的生命周期函数的执行顺序,而应用程序做的就是给这些个生命周期函数进行实现填充,控制权掌握在android手中。
2.依赖注入。实现组件间关系从程序内部提到外部容器来管理。也就是说由容器在运行期将组件间的某种依赖关系动态的注入组件中。控制程序间关系的实现交给了外部容器来完成。
为了更好的理解依赖注入,下面通过例子说明下:
假设有两个类B 和 C:B作为调用者,C是被调用者。一般的做法是:
工厂模式实现如下:
使用Ioc依赖性注射实现
这个就和模板模式有点类似,只是模板模式的使用范围有点窄而已
1.控制反转-反向控制。以往的开发过程中,都是应用程序去调用系统的接口方法,比如调用系统library,这种做法的特点是,控制权掌握在应用程序手中。而控制反转就是在系统框架中,已经定义好了具体的操作模式,应用只需要实现部分借口就可以,所以这个控制流程掌握在框架手中。
与反向控制相对的是正向控制,如子类调用父类的方法,实现类调用系统库函数等
举例:
android中的框架中ActivityThread等已经定义好了activity的生命周期函数的执行顺序,而应用程序做的就是给这些个生命周期函数进行实现填充,控制权掌握在android手中。
2.依赖注入。实现组件间关系从程序内部提到外部容器来管理。也就是说由容器在运行期将组件间的某种依赖关系动态的注入组件中。控制程序间关系的实现交给了外部容器来完成。
为了更好的理解依赖注入,下面通过例子说明下:
假设有两个类B 和 C:B作为调用者,C是被调用者。一般的做法是:
public class B{
private C comp=new C();
......
}
工厂模式实现如下:
public class B{
private C comp;
private final static MyFactory myFactory = MyFactory.getInstance();
public B(){
this.comp = myFactory.createInstanceOfC();
}
public void someMethod(){
this.comp.sayHello();
}
}
使用Ioc依赖性注射实现
public class B{
private C comp;
public B(C comp){
this.comp = comp;
}
public void someMethod(){
this.comp.sayHello();
}
}
这个就和模板模式有点类似,只是模板模式的使用范围有点窄而已