Вопрос по реализации класса с интерфейсом - PullRequest
3 голосов
/ 12 сентября 2011

Я создал следующие классы для обмена изображениями. Они реализуют интерфейс, но мне нужен способ переключения между ними с помощью взаимодействия с пользователем. Я сделал это следующим образом:

enter image description here

Как видите, служба 1 и служба 2 реализуют iSharingServices и наследуются от PolimorphSharing .

PolimorphSharing - это простой и абстрактный класс, который реализует методы, которые я хочу сделать общедоступными из Сервиса 1 и Сервиса 2. Эти методы затем будут переопределены в Сервисе 1 и Сервисе 2.

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

private var sharingService:PolimorphSharing = new SharingServicesGW('svc1').createService();

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

Любые мнения здесь будут оценены. Я чувствую, что я вроде как реализую фабричный шаблон здесь трудным путем.

UPDATE: Просто добавлю немного понимания к этому. По сути, идея заключается в том, чтобы мой клиент мог загружать изображения с помощью различных служб общего доступа, таких как imageshack, imgur и т. Д. Я хочу, чтобы мой клиент мог выбирать службу, в которой должно быть опубликовано изображение (следовательно, « переключение между ними с взаимодействием с пользователем », вопрос в теме.

Метод, который выполняет загрузку, это requestShareImage (), processResults () просто превращает все, что возвращается, в уникальный формат, поэтому мой клиент всегда может прочитать его одинаково. getObject () - мой метод доступа, и onIOError будет обрабатывать исключения с любым из общедоступных API

Спасибо всем заранее,

1 Ответ

1 голос
/ 13 сентября 2011

SharingServicesGW IS завод.Однако нет необходимости - и это не должно - наследоваться от PolimorphSharing.Кроме того, вы делаете это немного искажено.Клиент должен использовать объекты типа интерфейса, а не абстрактный тип.Ваш интерфейс должен определять публичный API, а не ваш абстрактный базовый класс.Фактически в интерфейсах AS3 могут определяться только открытые члены, в то время как псевдо абстрактные классы могут обеспечивать реализацию защищенных членов.

- EDIT -

вот диаграмма UML, как я бы это сделал enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...