Преимуществах перед чем?
Мне команды помогают выделить обособленную асинхронную операцию в обособленный модуль.
Который легко модифицируется и реиспользуется.
Код последовательных действий становится понятным.
пример из реального проекта:
Код AS3:
_preloadContext = new PreloadContext();
_preloadCommand = new CompositeCommand(CompositeCommandKind.SEQUENCE);
_preloadCommand.addCompleteListener(preloadCommand_completeHandler);
_preloadCommand.addErrorListener(preloadCommand_errorHandler);
var updCommand:UpdateResourcesCommand = new UpdateResourcesCommand(_preloadContext);
createUpdatePreloader(updCommand);
updCommand.addCompleteListener(updateCompleteHandler);
var preloadGuiCommand:PreloadGuiCommand = new PreloadGuiCommand(_preloadContext);
preloadGuiCommand.addEventListener(Event.ACTIVATE, preloadGuiActivateHandler);
_preloadCommand
// грузим rewrite-список ресурсов, парсим его, создаём реврайтер для лоадеров
.addCommand(new LoadAndParseRewriterCommand(_preloadContext))
// грузим локаль
.addCommand(new LoadAndParseLocaleCommand(_preloadContext))
// загружаем дефолный фонт
.addCommand(new LoadSWFCommand('lib/fonts/opensans.swf', new LoaderContext(false, ApplicationDomain.currentDomain)))
// грузим апдейты
.addCommand(updCommand)
// предзагружаем гуи
.addCommand(preloadGuiCommand)
.execute();
Сами по себе команды тоже могут быть составные, например UpdateResourcesCommand
создаёт секвенцию паралленых комманд, которые грузят в 5 потоков по списку файлы и затем их сохраняют в сторадже.