Design Patterns were initially grouped into the categories
creational, structural and behavioural.
Lazy Loader is an initialisation pattern
that (for example) instantiates an empty object but does not
populate the object until it is required.
Proxy is a structural pattern that
provides a surrogate of an object to control access to it.
Adapter is another structural pattern that
converts the interface of an object into the interface that another
client expects. Adapters let objects work together that otherwise
not work due to incompatible interfaces.
Pipes and Filters Implement the
transformations by using a sequence of filter components, where
each filter component receives an input message, applies a simple
transformation, and sends the transformed message to the next
component. Conduct the messages through pipes [McIlroy64] that
connect filter outputs and inputs and that buffer the communication
between the filters. [Microsoft]