Ссылки (Шаблоны проектирования GOF, Шаблоны проектирования Head First, http://www.dofactory.com/Patterns/PatternObserver.aspx ]), которые я прочитал относительно шаблона проектирования наблюдателя, предусматривают, что конкретный объект содержит ссылку на конкретного наблюдателя. Примерно так:
class ConcreteObserver : IObserver
{
ConcreteSubject concreteSubjectInstance;
//other code, etc.
}
Теперь, если конкретный Subject сам реализует интерфейс Subject (или является производным от некоторого абстрактного класса Subject), почему бы не сделать тип в ConcreteObserver этим абстрактным / интерфейсом? Т.е.
class ConcreteObserver : IObserver
{
ISubject concreteSubjectInstance;
//other code, etc.
}
Более того, почему бы просто не сделать его полем в (например) интерфейсе IObserver
?
В конечном счете, учитывая, что сам шаблон, кажется, ослабляет связь Субъекта с его Наблюдателями, почему кажется, это не продвигается при привязке наблюдателя к его теме?
Или нет? Я основываю это только на примерах, которые я прочитал.