Design Pattern 
Singleton Pattern 
- Ensures that only one instance of a class can exist and provides a global point of access to it.
 
Factory Pattern 
- Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
 
Abstract Factory Pattern 
- Provides an interface for creating related objects, without specifying their concrete classes.
 
Builder Pattern 
- Allows objects to be created step-by-step, with the ability to skip or repeat certain steps, and to produce different variations of an object.
 
Adapter Pattern 
- Allows objects with incompatible interfaces to work together by creating a wrapper object that translates between them.
 
Decorator Pattern 
- Allows behavior to be added to an individual object, either statically or dynamically, without affecting the behavior of other objects from the same class.
 
Observer Pattern 
- Allows an object to maintain a list of its dependents and notify them automatically when it changes state.
 
Strategy Pattern 
- Allows different algorithms to be selected dynamically at runtime, without changing the interface of the object that uses them.
 
Template Method Pattern 
- Defines the skeleton of an algorithm in a superclass, but allows its subclasses to override certain steps of the algorithm without changing its structure.
 
Composite Pattern 
- Allows objects to be treated as a tree-like structure, with individual objects and groups of objects treated in the same way.