Все привет. Подскажите пожалуйста, как правильней переделать? Никогда не связывался с Интерфейсами. Хотя в моем случае понимаю не совсем даже интерфейсы нужны.
В приложении есть разные окна, которые могут сменять друг друга (одновременно существовать не может несколько окон). Например, окно с приветствием - класс WelcomeScreen, настройками - класс SettingsScreen, информацией о профиле - AccountScreen и т.д.
Сейчас в каждом из них есть методы:
- show() // плавно показать окно
- hide() // плавно скрыть окно
- changeLang(lang:String) // сменить язык
- resize() // ресайз объектов в окне
- destroy() // ликвидировать
Реализация show() и hide() одинакова во всех окнах - следовательно их можно вынести в некий общий класс. Реализация остальных методов различается для разных окон.
Как понимаю, можно создать интерфейс, например IWindow - в котором будут перечислены все эти методы.
И создать некий шаблонный класс Window, который будет имплементить все эти методы - show() и hide() с реализацией. А остальные методы оставить пустыми - классы наследники будут делать override.
Код AS3:
package
{
public interface IWindow
{
function show():void;
function hide():void;
function resize():void;
function changeLang():void;
function destroy():void;
}
}
package
{
import com.greensock.TweenMax;
import com.greensock.easing.Linear;
import flash.display.MovieClip;
import flash.events.Event;
public class Window extends MovieClip implements IWindow
{
public static const HIDE_COMPLETE:String = 'hideComplete';
public function show():void
{
TweenMax.to(this, 0.3, {alpha: 1, ease:Linear.easeNone});
}
public function hide():void
{
TweenMax.to(this, 0.5, {alpha: 0, ease:Linear.easeNone, onComplete:onHideTweenFinished});
}
private function onHideTweenFinished():void
{
dispatchEvent(new Event(HIDE_COMPLETE));
}
public function changeLang():void {}
public function resize():void {}
public function destroy():void {}
}
}
Теперь можно создавать любое окно наследуясь от Window
Код AS3:
public class SettingsScreen extends Window
. Но мне эта реализация не совсем нравится. Я единственный разработчик в приложении - и поэтому знаю/помню что в каждом окне мне нужно делать override пустых методов. А если, допустим, за приложение взялся еще кто-нибудь дорабатывать, хочет добавить новое окно - он вряд ли поймет, что ему нужно перезаписывать эти методы.
Как все таки правильней будет?
Либо же вариант 2. В классе Window описать только классы с реализацией - show() и hide(). В интерфейсе IWindow обозначить остальные методы (они будут реализовываться в каждом окне по-своему). И создать некий класс WindowManager, в котором будет метод добавления окна addWindow(win:IWindow) - этот класс будет руководить парадом появления/скрытия окон.
И в итоге каждое отдельное окно должно будет наследоваться от Window. А чтобы мог добавляться в WindowManager - должен имплементить IWindow.
Или так лучше?
Заранее спасибо за помощь в вопросе!