泛谈 Pattern in Avalon -- IoC

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 概要: Avalon的设计不仅有一个继承的层次结构,同时还包含了一个组件的层次结构。在这个组件层次里面,完全由父组件来控制程序的流程,就像是军队里完全由指挥官来命令士兵做事一样。 倒置控制(Inversion of Control简写为IoC)是Avalon里面最基本的一个设计原则。IoC原则加强了设计的安全性。 这里做一个简要地介绍: 框架应该做什么?框架应该在程序的并发、顺序事件和活动中掌控着主体程序的运作机制。 而设计者是在一系列的对象之间创建对象链,所有在这条链上的对象都能够在这一系列链条式的委托层次里面响应特定的消息。这里有一个主要的语义细节:IoC是通过引用一个父组件实例来控制子组件实例。基于这个语义,可以认为SAX API并没有采用IoC原则,因为它的目的是从消息源发送信息到一个处理者,可以认为这个消息源和处理者并不存在严格的父子关系,即消息源没有掌控这个处理者的生存周期。 类比的定义: 我们可以用几个类比来理解这个IoC原则。这些都是来自于日常的生活经历,我们把这种思路融合到我们的代码里面,其中一个类比就是军队的“指挥系统”。 指挥系统: 这个可能是IoC最最清晰的类比.军队给每一个入伍的新兵在他们各自的军衔范围内一些基本的他们能控制的东西,同时新兵必须服从指挥官发布的命令。以代码的观点来考虑这个原则,实例化组件的实体(指挥官)赋予每一个组件(新兵)某些组件自己需要的预设操作,然后这些实例化组件的实体就指挥着这些组件的每一个动作,也就是控制组件怎样通过这些预设动作,来完成一些有功能意义的活动。 熟悉军队的人会说这个类比存在缺陷,在军队里面,任何一个指挥官都可以对其军衔以下的人员发布命令。但是在软件开发的世界里面,为了保证系统的安全性,我们并不希望这种模式存在。对于Avalon,IoC是从一个控制对象(父)到被控制组件(子),而一个父可以有多个子,一个子只能有一个父。 如何运用: IoC以很简单的方式被应用到Avalon的结构中,从根本来讲就是:组件的层次体系采用一种被动的结构。来看以下代码: class MyComponent implements LogEnabled { Logger logger; public enableLogging(Logger newLogger) { this.logger = newLogger; } myMethod() { logger.info("Hello World!"); } } MyComponent的父组件实例化一个MyComponent对象,设定其需要的Logger对象,然后就调用myMethod方法。MyComponent组件不具有自治能力,而是要被父组件正确的配置以后才能正常的工作,这里是记录logger信息。 这个组件类,如果没有父给他一个它工作所需要的logger实现,它自己没有一种可以获得这个logger实例引用的途径,同时它也不保持和这个父组件的状态,即它并不知道哪个父在指挥它工作。 2002/12/26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值