Показать сообщение отдельно
Старый 28.09.2011, 20:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Возьмем какие нибудь окна: у всех окон есть 3 кнопки - закрыть, да, нет. И есть 40 разных таких окон, причем все разные: где "закрыть" сверху крестиком, где кнопкой "отмена", а где кнопкой "Ок". При этом под все 40 окон графика абсолютно разная - где мальчик подсказывает, где девочка танцует, а где просто текст написан. Как обобщить это, например, в классе BaseWindow?
Лучше всего создать свойство skin:Skin, передавая его в BaseWindow. При этом у Skin должны быть следующие методы:
Код AS3:
get closeButton():InteractiveObject;
get cancelButton():InteractiveObject;
get okButton():InteractiveObject;
Наверное, логичней будет создать ISkin и передавать его, но разницы нету: всё равно придется создать класс, реализующий ISkin и передавать его: для красоты скажем что наш Skin и реализует этот ISkin.
В итоге, 3 разных клипа с контентом (разными скинами) наследуются от Skin. В геттерах Skin реализация что то вроде этого:
Код AS3:
return getChildByName("closeButton") as InteractiveObject;
Вот такой подход будет одним из самых правильных. По сути, это частный случай того, что хотите Вы: SkinOnStage extends Skin, хотя сам Skin ничего толком не знает про внутренности.

Поэтому я не совсем согласен с коллегами выше: если задумывалось, что у потомка есть какая-то внутренность, которая нужна для обобщения где-то сверху - значит, её можно взять.