In software engineering, structural design patterns are design patterns that ease the design by identifying a simple way to
realize relationships between entities.
Structural patterns are for tying together existing function.
Examples of Structural Patterns include:
Adapter: Adapts one interface for a class into one that a client expects
Bridge: Decouple an abstraction from its implementation so that the two can vary independently
Composite: A tree structure of objects where every object has the same interface
Decorator : Add additional functionality to a class at runtime where subclassing would result in an exponential rise of new classes
Facade: Create a simplified interface of an existing interface to ease usage for common tasks
Flyweight: A high quantity of objects share a common properties object to save space
Proxy: A class functioning as an interface to another thing
Aggregate: A version of the Composite pattern with methods for aggregation of children
Extensibility: also known as Framework - hide complex code behind a simple interface
Pipes and filters: A chain of processes where the output of each process is the input of the next
Private class data: Restrict accessor/mutator access
The phase of a software project that concerns itself with the discovery of the structural components of the software system to be built, not with implementation