Use the Observer pattern when changes to the state of one object may require changing other objects , and the actual set of objects is unknown beforehand or changes dynamically. You can often experience this problem when working with classes of the graphical user interface.