注册的每个command类都存放到了一个Dictionary里面,每次需要用到的时候都是实例化了一次。这是cairngorm旧版本里的代码:
private var commands : Dictionary = new Dictionary(); public function addCommand( commandName : String, commandRef : Class ) : void { if( commands[ commandName ] != null ) { throw new CairngormError( CairngormMessageCodes.COMMAND_ALREADY_REGISTERED, commandName ); } commands[ commandName ] = commandRef; CairngormEventDispatcher.getInstance().addEventListener( commandName, executeCommand ); } protected function executeCommand( event : CairngormEvent ) : void { var commandToInitialise : Class = getCommand( event.type ); var commandToExecute : ICommand = new commandToInitialise(); commandToExecute.execute( event ); } /** * Returns the command class registered with the command name. */ protected function getCommand( commandName : String ) : Class { var command : Class = commands[ commandName ]; if ( command == null ) { throw new CairngormError( CairngormMessageCodes.COMMAND_NOT_FOUND, commandName ); } return command; }