Decoupling Systems with the Observer Pattern
In the last chapter, we encapsulated actions into objects and implemented an undo/redo system using the Command pattern. In this chapter, we’ll create an event handling system to separate the object sending information from the object, or objects, receiving that information. You’ve likely encountered the Observer pattern without even knowing it, as most languages use event systems under the hood to facilitate communication between objects. You shouldn’t be starting from ground zero for the theory on this one (and even if you are, we’ll get you on track in no time).
At its core, the Observer pattern is a syncing machine – when data changes in one object, you want to keep any objects relying on that information up to date. If you’ve ever wrestled with keeping data in tune with how it’s displayed in a UI, you’ve already figured out the Observer pattern’s most popular use case...