Android IOC框架实现


什么是IOC?

IOC框架称为控制控制反转框架也称为依赖注入框架,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

IOC相关概念

在写一个框架之前,我们需要了解下IOC的相关概念。
简单来说,对象和IOC容器的关系就像电脑和外设之间的关系,其中电脑相当于对象,而IOC容器相当于一个个不同的电脑外设。外设具有不同的功能,并且他们和电脑之间都遵循着某种协议(如USB2.0协议),因此它们在彼此独立的同时却又能相互联系。
输入功能原本属于电脑的,但是外设键盘却能通过电脑提供的相关接口来控制电脑的输入功能,这就是IOC概念里面的控制反转。由于电脑和外设间都遵循着USB协议,键盘便可以实现随意切换,却不影响键盘的输入功能,这就是IOC概念里面的依赖注入。

好了,了解完IOC协议后,便可以开始绘制相应的架构图了。

IOC框架图

IOC框架图

这是我用StartUml绘制的UML图。

如这个图所示,整个IOC框架可以分为5个部分
1、ModuleListener,IOC的核心接口,相当于电脑的USB协议
2、AbsModule,这就是IOC容器,IOC容器功能都在这个类里面实现
3、IOCProxy,对象的静态代理,相当于电脑的USB接口
4、ModuleFactory,IOC容器的享元工厂,用于创建IOC容器
5、AbsActivity,具体的对象

有了概念,有了图纸,现在终于可以愉快的码代码了

功能实现

ModuleListener

如上文所说的那样,ModuleListener是整个IOC框架的IOC协议,它本质上就是一个接口,定义了几个方法,仅此而已,是的,所谓的IOC协议就是那么简单。
代码如下:

public interface ModuleListener {
/**
* 无参的回调
*
* @param method 方法名
*/
public void callback(String method);

/**
* 带参数的回调
*
* @param method 方法名
* @param dataClassType 参数类型
* @param data 数据
*/
public void callback(String method, Class<?> dataClassType, Object data);

/**
* 统一接口的回调,回调接口为dataCallback
*
* @param result 返回码
* @param data 回调数据
*/
public void callback(int result, Object data);
}

AbsModule

AbsModule,这就是IOC框架的IOC容器,IOC容器的功能都应该在它的子类里面实现。
AbsModule依赖于ModuleListener接口,它持有ModuleListener的引用。其实说白了它就是一个观察者对象,仅此而已….
代码如下:

public class AbsModule {
public String TAG = "";
private Context mContext;
private ModuleListener mModuleListener;

public