title: Observer Design Pattern - Concrete Subjects and Observers
body: <p>The references (GOF Design Patterns, Head First Design Patterns, <a href="http://www.dofactory.com/Patterns/PatternObserver.aspx" rel="noreferrer">http://www.dofactory.com/Patterns/PatternObserver.aspx</a>) that I've read regarding the observer design pattern stipulate that the concrete subject holds a reference to the concrete observer. Much like this:</p>
  
  <pre><code>class ConcreteObserver : IObserver
  {
      ConcreteSubject concreteSubjectInstance;
      //other code, etc.
  } 
  </code></pre>
  
  <p>Now, if the concrete Subject is itself implements a Subject interface (or derives from some abstract Subject class) why not make the type in the ConcreteObserver be of that abstract/interface? I.e.</p>
  
  <pre><code>class ConcreteObserver : IObserver
  {
      ISubject concreteSubjectInstance;
      //other code, etc.
  } 
  </code></pre>
  
  <p>Moreover, why not just make it a field in the (e.g.) <code>IObserver</code> interface?</p>
  
  <p>Ultimately, given that the pattern itself seems to loosen the coupling of the Subject to its Observers, why does this appear not to be promoted when coupling an Observer to its subject? </p>
  
  <p><img src="https://i.stack.imgur.com/cgIJY.png" alt="enter image description here"></p>
  
  <p>Or is it? I am only basing this on examples that I have read.</p>