У меня есть проблема, связанная с ООП, с Flash, actionscript 3. Это личный проект, и я ищу шаблон проектирования или обходной путь для этой проблемы, и моя цель - изучить новые вещи.
Iсоздали класс под названием Chain.Я создал этот класс утилит, чтобы упростить вызов отложенных функций.Вы можете создать цепочку функций, добавляя их с задержкой в миллисекундах.Эта цепочка может быть выполнена несколько раз, даже в обратном порядке.Этот класс имеет функции, которые возвращают себя.Это позволяет использовать синтаксис в стиле jQuery, подобный следующему:
var chain:Chain = new Chain();
chain.wait(100).add(myFunction1,300).wait(300).add(myFunction2,100);
// etc..
Для примера я оставил множество функций просто для демонстрации проблемы.Класс Chain в основном предназначен для добавления функций и запуска / остановки цепочки.
public class Chain
{
function wait(delay:int = 0):Chain
{
// do stuff
return this;
}
public function add(func:Function, delay:Number = 0):Chain
{
list.push( new ChainItem(func, delay) );
return this;
}
}
Теперь у меня есть еще один класс, называемый ChainTween.Я пытаюсь разделить вещи, чтобы сохранить цепочку с некоторыми основными функциями и заставить ChainTween выполнять некоторые анимационные трюки.У меня была идея создать маленький двигатель на основе класса Chain.В настоящее время расширяется Цепь.Он использует множество защищенных переменных из класса Chain и переопределяет некоторые основные функции для Chain, чтобы добавить функции анимации в процесс Chain.
public class ChainTween extends Chain
{
function animate(properties:Object = null, duration:Number = 0, easing:Function = null):ChainTween
{
// do stuff
return this;
}
}
Теперь это проблема: я хочу сохранить цепочкусинтаксис, но wait () возвращает экземпляр Chain, а Chain не имеет анимационной функции.
var chain:ChainTween = new ChainTween();
chain.wait(100).animate({x:200}, 100).wait(250);
Я пытался переопределить функции wait () и add () в классе ChainTween, но это вызывает несовместимое переопределение.
Я мог бы разыграть chain.wait (100) как ChainTween, но это очень уродливо и бесполезно, когда я объединяю их в цепочку.Теперь я не хочу добавлять какие-либо функции ChainTween в Chain (также нет фиктивных функций), и я хочу сохранить завершение для всех функций, поэтому возвращать Object тоже нельзя.Я пытался использовать интерфейс, но это создает ту же проблему, поскольку функции интерфейса должны быть реализованы в классе, который его реализует.
Теперь я подумал о создании экземпляра Chain внутри ChainTween, ноэто не позволяет мне переопределять функции, и тогда я должен сделать множество свойств общедоступными вместо защищенных, что тоже не является предпочтительным.
Возможно ли это, и есть ли у кого-нибудь отличное решение для этого?