I want to point out here how in my opinion we should learn and think about software design. While I was studying many of my colleagues including me tried to learn design pattern by remembering some UML diagrams or descriptions from a book. I don't want to say that remembering diagrams (associated with remembering object model) is something wrong. No it is not. But deep understanding of concrete design pattern and how it should be applied to the code and how all patterns play together needs a time and design experience.
Let's take a closer look at the Observer Pattern.
Observer Pattern
Observer Pattern is based on a very simple idea of a Subject (Observable) and an Observer. Subject is an object with registered Observers and with the ability to notify them. Each Observer is a 'Concrete Observer' which means that each implements common Observer interface with exposed methods for the Observable. Each Observer to being notified has to be registered for the concrete Observable. Such approach reduces calls between objects when group of them (Observers) is waiting for the result of other (Observable). In this approach the Observable is the one who triggers the action and who contacts with Observers only when there is a need.
