В OOP Flash есть два основных способа решения архитектурных вопросов. Стандартная модель, с которой любой серьезный разработчик должен освоиться, использует пользовательские события. В приведенном выше примере ваш windowKnob не знает об этом окне - он просто знает, было ли оно нажато. При нажатии он отправляет событие «knobPressed». Объект Car перехватывает это событие и затем сообщает WindowManager открыть соответствующее окно.
Поначалу с событиями немного сложно работать, потому что не очевидно, как отправить с ними полезные данные. Может быть, ваша ручка может быть нажата вверх или вниз, но отправляет только одно событие. Как же тогда машина узнает, хотите ли вы открыть или закрыть окно? Поскольку вы расширяете класс Event до созданного WindowKnobEvent, а в WindowKnobEvent вы открываете открытое свойство с именем «direction», которое может быть установлено как вверх или вниз. Когда это событие запускается и передается вашему WindowManager, может быть, у вас настроен оператор switch для поведения по-разному в зависимости от свойства direction, это имеет смысл?
Таким образом, в 95% случаев вы захотите использовать модель событий для распространения данных по всему приложению.
Иногда, однако, может быть целесообразно использовать обратные вызовы. Другими словами, вы должны передать объекту WindowKnob ссылку на функцию OpenWindow в вашем WindowManager. Поскольку все функции являются объектами, вы просто должны сказать var openWindowFunction: Function = WindowManager.openWindow, а затем передать openWindowFunction вашему классу регулятора.
ЭТО ОБЩАЯ ПЛОХАЯ ИДЕЯ: это означает, что ваш код тесно связан. Это означает, что вы не можете взять эту ручку и бросить ее в другую машину - вы сломаете ее, так как она больше не сможет содержать ссылку на WindowManager первого автомобиля. Однако при определенных обстоятельствах обратные вызовы могут быть более эффективными. Например, при оптимизации мобильных устройств обычно лучше минимизировать количество создаваемых объектов. Каждое событие, которое вы отправляете, использует память. Несколько эффективнее установить ссылку на обратный вызов один раз, а затем позволить ему работать без создания нового объекта Event каждый раз, когда кто-то нажимает на ручку.
Это помогает? Я имею в виду, что ООП-архитектура AS3 вряд ли можно легко обобщить в одном ответе SO, но я предполагаю, что суть заключается в следующем: узнать, как работают события, и все станет на свои места. Не используйте обратные вызовы, если вы не понимаете последствия.
Ура, и я надеюсь, что это поможет!
MYK