Structural patterns include some quite sophisticated and powerful techniques. However, they are based on just a few basic techniques, primarily:
Delegation: The pattern is one in which a given object provides an interface to a set of operations.
However, the actual work for those operations is performed by one or more other objects.
Object composition: Other objects are stored as pointers or references inside the object that provides the interface to clients.
Object composition is a powerful yet often overlooked tool in the OOP programmer's toolbox. Structural patterns show you how to take advantage of it.
Structural patterns have many beneficial effects including:
Increased efficiency (Decorator, Flyweight, Proxy)
Enhanced reusability (Adapter, Bridge, Decorator)
Separating implementation from interface (Adapter, Bridge, Façade, Proxy)
Reducing complexity by providing cleaner, simpler interfaces to a system that are easier for client programmers to understand
(Adapter, Bridge, Composite, Facade, Proxy)
In the next lesson, you will become familiar with the structural patterns introduced here.