IOC模式简介

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

IOC模式介绍

IOC全称Inversion of Control,是Apache Avalon项目创始人之一,Stefano Mazzocchi提出的,该模式主要强调设计的安全性。

IOC模式是什么

在该模式中,Framework扮演了主程序的角色,负责协调事件及应用的活动。

设计者在对象中建立一个链,该链上的所有对象都可以用代理的方式响应某种确定格式的消息。IOC(翻转控制)有一个语意上的细节,那就是父对象控制子对象。由这点可以看出,SAX API不能算IOC,因为它的目的是从源发送信息到一个处理器。

注:代理(delegation),java中的classLoader就是采用的代理机制,在load一个类时,先让parent class loader去load,只有父类都不能load时,才尝试自己load

类似定义:

还有一些类似但不同的概念可以帮助你来理解IOC模式。

一个类似的例子是军队中的命令链(Chain of Command)。

这可能是最类似的例子了。军队根据每个新兵的等级为他们提供所需的基本装备,并发布新兵必须遵守的命令。同样的规则可以应用到编程中。每一个组件(构件component)都被初始化实体(instantiating entity,像军队中的指挥官)指定了需要实现的操作。初始化实体可以操纵这些组件,告诉他们需要如何去做。

在这个类比中有一些不太相同的地方,在军队中,只要是级别比自己低的军人,指挥官都可以向其发号施令,但是在编程中,出于安全性的考虑,你肯定不会希望是这样。

如何应用:

IOC应用很简单,基本上组件架构使用了一种被动的结构,看如下代码:

class MyComponent

implements LogEnabled

{

Logger logger;

public enableLogging(Logger newLogger)

{

this.logger = newLogger;

}

myMethod()

{

logger.info("Hello World!");

}

}

MyComponent的父类初始化MyComponent,设置了Logger,并调用myMethod方法。组件并不是自治的,他接受了父类传递给他经过父类配置好的logger对象。

MyComponent类没有从父类那里获得任何状态,并且如果没有父类给他传递的话,也无法获取一个logger的引用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航