Observer design pattern consists of the the Observer Object and the Subject being observed.
This pattern is useful when the Subject object has a long running operation. And the Observer object would like to know when certain events happen in the subject. One solution would be for the Observer to constantly poll the subject to see what its up to. But wouldn't it be a lot better solution if the subject can just tell you as and when it happens.
Lets tell a little story. Your internet connection has suddenly stopped working and you call your ISP support line. Their telephone system tells you that all its operators are busy and to wait. The more you wait you more frustrated you get and you are not happy. In a alternative world, your internet connection goes down and you call your ISP. The ISP tells you that their operators are busy, takes your contact number and promises to call you back when a support operator becomes available. You continue to do your own work and some minutes later the ISP's support operator calls you back. This is a far more ideal solution as you are not left hanging doing nothing. This is what the Observer pattern achieves.
The implementation of the pattern requires that:
- All the instance of the Observers are registered with the Subject.
- The Subject notifies the Observer when something interesting happens.
- An observer can also be unregistered from receiving updates from the subject.
The Subject class is the object we need to observe. To facilitate this, The Subject class maintains a list of IObserver's and allows for them to be added and removed. And when ever a certain event happens it goes the list of its observers and notifies them.
The uses of the pattern are many especially in the UI based applications where the user initiated events can be communicated to the registered observers whenever it happens.
Download Sample Code