Я сам пытался найти хорошее решение для этого. Лучшее решение, которое я нашел, - это использование шаблона декоратора, когда вы используете один класс для украшения другого класса.
Допустим, я хотел загрузить кнопку из флэш-памяти и инкапсулировать поведение при переворачивании кнопки, это может выглядеть примерно так:
public class AnimatedButton extends Sprite
{
private var mc:MovieClip;
public function AnimatedButton( mc:MovieClip )
{
this.mc = mc;
addChild(mc);
mc.addEventListener(MouseEvent.CLICK, onClick);
mc.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
mc.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
}
protected function onClick ( event:MouseEvent ):void
{
mc.gotoAndPlay("clicked");
dispatchEvent( event) );
}
protected function onRollOver ( event:MouseEvent ):void
{
mc.gotoAndPlay("over");
dispatchEvent( event) );
}
protected function onRollOut ( event:MouseEvent ):void
{
mc.gotoAndPlay("out");
dispatchEvent( event );
}
}
тогда, когда я захочу добавить состояния прокрутки к кнопке, я бы украсил это так:
private var btn:AnimatedButton = new AnimatedButton( new FlashButton() );
это в основном создает кнопку с недавно украшенной функциональностью. Самое классное то, что теперь я могу использовать это на любой кнопке с кадрами "over", "out" и "clicked".