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.