Ensure a class only has one instance, and provide a global point of access to it.
Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
Define the skeleton of an algorithm in an operation, deferring some
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclasses.
Separate the construction of a complex object from its representation so that the same construction processes can create different representations.
Attach additional responsibilities to an object dynamically. Decorators