У меня возникают проблемы с шаблоном наблюдателя. Он говорит, что Observer и Subject должны быть интерфейсами. Я понимаю, почему наблюдатели являются интерфейсами, но почему не лучше, чтобы тема была абстрактным классом? Не могли ли вы уже реализовать хотя бы удаление/регистрацию?Обзор абстрактного шаблона наблюдателя против интерфейса
ответ
Образцы дизайна предназначены для адаптации к конкретным потребностям приложений; они не предписывают правила, установленные в камне. В частности, для вас нужно решить, является ли что-то абстрактным классом или интерфейсом, учитывая все последствия, которые решение имеет для остальной части приложения.
Сказанное, интерфейсы рекомендуется по абстрактным классам в целом по нескольким причинам. Например, абстрактные классы требуют использования наследования, и на многих языках вы не можете наследовать более одного класса. Если это не проблема для вашего случая использования, продолжайте использовать абстрактные классы, если найдете их более удобными.
Почему не просто абстрактный класс, который реализует тему? Использование интерфейса просто дает вам большую гибкость. На самом деле вы не покупаете ничего, чтобы начать с абстрактного класса. Если вещи все меняются очень много (скажем, границы пересечения границ), то ваш Observable будет зависеть от абстрактной реализации.
хорошо поблагодарить у всех ребят, которые помогли много :) – Maximosaic
почему не лучше иметь испытуемому абстрактный класс
Чтобы избежать привязки конструкции к конкретной конкретной реализации. Помните, что целью является создание шаблона, который даст вам гибкость при необходимости заменять конкретные предметы и не будет привязан наблюдателей к тому, что было в оригинальной реализации.
Вы не хотите, чтобы наблюдатели ссылаться на FirstConcreteSubject
, а интерфейс ISubject
, который может быть быстро изменен быть реализован SecondConcreteSubject
без необходимости модифицировать наблюдатель.
Тем не менее, нет ничего плохого (IMHP) с наличием BaseSubject
абстрактного класса для хранения некоторых из кода, который был бы в противном случае дублируется FirstConcreteSubject
и SecondConcreteSubject
.
В шаблоне проектирования, когда используется интерфейс слова, это означает абстрактный API, который подвергается клиентскому компоненту, который будет иметь различные конкретные реализации.
Когда интерфейс шаблона проектирования сопоставляется с Java-миром, он может быть либо интерфейсом Java, либо абстрактным классом Java, и отображать конкретные классы конкретных классов в обычный класс Java (не абстрактный).
Однако при принятии решения вам необходимо понять разницу между интерфейсом Java и абстрактным классом и их целью, а также плюсами и минусами.
- 1. Образец наблюдателя против шаблона реактора
- 2. Дизайн шаблона наблюдателя против «Слушателей»
- 3. C++, указатели функций против шаблона наблюдателя
- 4. шаблона Observer .. весенние события против ява ee6 шаблона событий наблюдателя
- 5. шаблон наблюдателя против MVC
- 6. Расширение встроенного абстрактного абстрактного шаблона Класс шаблона
- 7. Реализация шаблона наблюдателя с событиями
- 8. модульное тестирование для шаблона наблюдателя
- 9. Обертка шаблона наблюдателя с Cython
- 10. MVC против наблюдателя шаблон
- 11. Предложение шаблона наблюдателя
- 12. Перегрузка шаблона наблюдателя
- 13. Неправильное использование шаблона наблюдателя?
- 14. образец класса шаблона наблюдателя
- 15. стратегия для шаблона наблюдателя?
- 16. pygame - ошибка шаблона наблюдателя
- 17. Класс шаблона наблюдателя (JAVA)
- 18. О прототипе шаблона наблюдателя
- 19. Создание интерфейса для шаблона абстрактного класса в C++
- 20. Резьбовая реализация шаблона наблюдателя - C++
- 21. Реализация шаблона наблюдателя с winforms
- 22. Реализация шаблона наблюдателя с @Dependent
- 23. Реализация шаблона наблюдателя над RMI
- 24. Основная реализация наблюдаемого шаблона наблюдателя
- 25. Обновить вид из шаблона наблюдателя
- 26. Реализация шаблона наблюдателя в C++
- 27. Реализация шаблона MVC и наблюдателя
- 28. Обзор кодов против регистрации часто?
- 29. Обзор макета пользовательского интерфейса Android
- 30. @MappedSuperclass против простого абстрактного класса
Во многих отношениях идеальная модель будет иметь абстрактный класс, который реализует интерфейс, но никогда не определяет никаких мест хранения реферата тип класса - всегда используйте интерфейс. Это позволило бы классам, которые могут выводиться из абстрактного типа, просто наследовать полезный код, тогда как те, которые должны быть получены из других типов, могут импортировать любой общий код в качестве шаблона. Однако подход будет терпеть неудачу, если некоторые потребители этого типа используют абстрактный тип, а не тип интерфейса, хотя это не обязательно, если классам не требуется доступ к личным данным других экземпляров. – supercat