Breaking down the Decorator pattern
As part of the Structural family of design patterns, the Decorator pattern is all about dynamically adding behaviors to individual objects without subclassing or changing the entire existing class. Instead of creating a subclass for each possible configuration you can think of, customizations are separated into decorator classes that wrap the object you want to modify – think changing an object’s skin versus its guts or internal workings (we’ll return to this analogy throughout the chapter). The Decorator pattern is useful when:
- You want to dynamically add behaviors to specific objects without affecting other objects or class hierarchies.
- You want the flexibility to add and remove additional behaviors.
- You want to avoid large inheritance hierarchies while still keeping your combination options open.
Let’s take an everyday example – getting dressed. When you wake up in the morning...