Gang of Four Design Patterns
Creational Design Patterns
o Abstract Factory . Allows the creation of objects without specifying their concrete
type.
o Builder. Uses to create complex objects.
o Factory Method . Creates objects without specifying the exact class to create.
o Prototype. Creates a new object from an existing object.
o Singleton. Ensures only one instance of an object is created.
Structural Design Patterns
o Adapter. Allows for two incompatible classes to work together by wrapping an
interface around one of the existing classes.
o Bridge. Decouples an abstraction so two classes can vary independently.
o Composite. Takes a group of objects into a single object.
o Decorator. Allows for an object’s behavior to be extended dynamically at run time.
o Facade. Provides a simple interface to a more complex underlying object.
o Flyweight. Reduces the cost of complex object models.
o Proxy. Provides a placeholder interface to an underlying object to control access,
reduce cost, or reduce complexity.
Behavior Design Patterns
o Chain of Responsibility . Delegates commands to a chain of processing objects.
o Command. Creates objects which encapsulate actions and parameters.
o Interpreter. Implements a specialized language.
o Iterator. Accesses the elements of an object sequentially without exposing its
underlying representation.
o Mediator. Allows loose coupling between classes by being the only class that has
detailed knowledge of their methods.
o Memento. Provides the ability to restore an object to its previous state.
o Observer. Is a publish/subscribe pattern which allows a number of observer objects
to see an event.
o State. Allows an object to alter its behavior when its internal state changes.
o Strategy. Allows one of a family of algorithms to be selected on-the-fly at run-
time.
o Template Method . Defines the skeleton of an algorithm as an abstract class,
allowing its sub-classes to provide concrete behavior.
o Visitor. Separates an algorithm from an object structure by moving the hierarchy of
methods into one object.