这是示例。
您希望您的模块为您的主应用程序做一些事情。例如,让您的模块提供一些用户通知功能。
因此,我们为该功能声明接口:
package test
{
public interface IAlertable
{
function alert(message:String):void;
}
}
然后我们声明我们的模块可以提供功能,在该接口中声明:
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300"
implements="test.IAlertable"
>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
public function alert(message:String):void{
Alert.show(message,message);
}
]]>
</fx:Script>
</mx:Module>
然后在主应用程序中,我们永远不会对我们的模块类名称或实现感兴趣,我们只需要知道它具有我们想要的功能:
<fx:Script>
<![CDATA[
import test.IAlertable;
protected function handleCreationComplete():void
{
moduleLoader.loadModule('test/TestModule.swf');
}
protected function testInterface():void{
var alertModule:IAlertable = IAlertable(moduleLoader.child);
alertModule.alert('Hello module world!');
}
]]>
</fx:Script>
<mx:ModuleLoader id="moduleLoader" width="100%" height="100%" ready="testInterface()"/>
现在您可以随时更改功能的实现而无需重新编译主应用程序(在当前示例中,您可以进行跟踪而不是警报),您甚至可以使用该接口创建不同的模块类,并且主应用程序永远不会注意到更改。