您的位置:首页 > 运维架构 > Apache

IOC模式简介

2004-11-05 10:28 369 查看
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的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息