これが例です。
あなたはあなたのモジュールがあなたのメインアプリのためにいくつかのことをすることを望みます。たとえば、モジュールにユーザー通知機能を提供させます。
したがって、その機能のインターフェイスを宣言します。
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()"/>
これで、メインアプリを再コンパイルせずにいつでも機能の実装を変更でき(現在の例では、アラートの代わりにトレースを実行できます)、そのインターフェイスで別のモジュールクラスを作成することもでき、メインアプリは変更に気付くことはありません。