Субъект дизайна Observer - интерфейс или суперкласс? - PullRequest
0 голосов
/ 10 ноября 2018

Я изучаю шаблоны проектирования с курса на Coursera. У них есть заметки о курсе, в которых они определяют Subject шаблона проектирования наблюдателя как суперкласс, как показано на рисунке и коде ниже

UML enter image description here

КОД (ПРЕДМЕТ) enter image description here

Теперь я думаю, что класс Subject сам по себе бесполезен, пока подкласс не унаследует его и не создаст какой-либо конкретный предмет. В таком случае Subject не должен быть Java interface вместо этого? По какой причине Subject - это не интерфейс Java, а Observer.

Есть ли какая-то конкретная причина для этого. Я немного запутался по этому поводу.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Если Subject был интерфейсом, то каждый класс, который реализует Subject, должен повторно реализовать все методы registerObserver, unregisterObserver и notify, которые являются очень стандартными.

Вы можете сказать, что поместите эти методы в класс помощника, чтобы каждый производный Subject мог просто делегировать задачи этому помощнику. Но, в конце концов, вы должны продублировать код делегирования для всех производных классов Subject. Несмотря на то, что код делегирования является коротким и понятным, это дублирование все еще расстраивает.

Вы можете найти этот аргумент в конце этой очень интересной статьи дяди Боба: http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html

0 голосов
/ 10 ноября 2018

Наблюдатель D P прост.

  1. Субъект - это объект, за которым наблюдает Наблюдатель.

  2. Субъект является одной сущностью, и наблюдателей может быть несколько.

  3. Субъект имеет список наблюдателей, но у субъекта будет субъект.

  4. Любое изменение в Субъекте будет сообщено всем наблюдателям, которые Субъект хранит в форме списка.

  5. Мы также можем использовать тему в качестве интерфейса. Все зависит от того, как мы реализуем вышеуказанные пункты.

enter image description here

...