The core purpose of the Observer pattern is to establish a one-to-many relationship between objects in which one acts as the subject while the others take the role of observers. The subject then assumes the responsibility of notifying the observers when something inside itself changes and might concern them.
It's somewhat similar to a publisher and subscriber relationship, in which objects subscribe and listen for specific event notifications. The core difference is that the subject and observers are aware of each other in the Observer pattern, so they are still lightly coupled together.
Let's review a UML diagram of a typical implementation of the Observer pattern to see how this might work when implemented in code:
As you can see, the Subject and the Observer both have respective interfaces that they implement, but the most important one to analyze is ISubject, which includes the...