Объединение методов с одинаковой реализацией
Все привет. Подскажите пожалуйста, как правильней переделать? Никогда не связывался с Интерфейсами. Хотя в моем случае понимаю не совсем даже интерфейсы нужны.
В приложении есть разные окна, которые могут сменять друг друга (одновременно существовать не может несколько окон). Например, окно с приветствием - класс WelcomeScreen, настройками - класс SettingsScreen, информацией о профиле - AccountScreen и т.д. Сейчас в каждом из них есть методы:
Реализация show() и hide() одинакова во всех окнах - следовательно их можно вынести в некий общий класс. Реализация остальных методов различается для разных окон. Как понимаю, можно создать интерфейс, например IWindow - в котором будут перечислены все эти методы. И создать некий шаблонный класс Window, который будет имплементить все эти методы - show() и hide() с реализацией. А остальные методы оставить пустыми - классы наследники будут делать override. Код AS3:
Код AS3:
Как все таки правильней будет? Либо же вариант 2. В классе Window описать только классы с реализацией - show() и hide(). В интерфейсе IWindow обозначить остальные методы (они будут реализовываться в каждом окне по-своему). И создать некий класс WindowManager, в котором будет метод добавления окна addWindow(win:IWindow) - этот класс будет руководить парадом появления/скрытия окон. И в итоге каждое отдельное окно должно будет наследоваться от Window. А чтобы мог добавляться в WindowManager - должен имплементить IWindow. Или так лучше? Заранее спасибо за помощь в вопросе! |
вариант 3 — методы show() и hide() реализованы в менеджере окон.
|
djken, а что мешает унаследовать все эти окна от одного базового класса, и прописать там эти методы как абстрактные? В этом случае и ты, и сторонний разработчик не сможете уклониться от реализации всех методов в наследниках.
|
Цитата:
|
Цитата:
Код AS3:
|
Wolsh, да, в принципе в моем случае можно так сделать. Но что, если за появление/скрытие должно отвечать само окно? (сначала внтури каждого окна всплывает логотип как-то особенно, потом остальные элементы) - в этом случае WindowManager не обязан знать ничего о внутреннем поведении окна при открытии/закрытии, и следовательно, мне нужно реализовать эти методы внутри класса Window - как в этой ситуации?
Appleman в AS3 нет Абстрактных классов и методов. Если только не реализовать их самом по такому принципу, например https://joshblog.net/2007/08/19/enfo...ctionscript-3/ |
метод changeLang(lang:String) вообще лучше не на уровне окна делать. Я бы лучше сделал наследники или даже обертки для TextField и там слушал событие смены языка, и после события менял текст в них. Независимо от окон вообще.
Метод resize реализовать одинаково для всех окон, в базовом классе. Остальное пофиг. Если все-таки нужно чтобы при вызове что-то предупреждало разработчика о том, что метод по-любому надо перезаписать, то Appleman предложил хороший вариант. Реальной абстракции в ас3 все равно нет и компилятор не пожалуется на отсутствие оверрайда |
Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +4, время: 16:18. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.