Design patterns are recurring solutions to software design problems you find again and again in real-world application development. Patterns are about design and interaction of objects, as well as providing a communication platform concerning elegant, reusable solutions to commonly encountered programming challenges.
We have 3 main types of design pattern.
- Creation patterns
+ Abstract Factory: Creates an instance of several families of classes
+ Builder: Separates object construction from its representation
+ Factory Method: Creates an instance of several derived classes
+ Prototype: A fully initialized instance to be copied or cloned
+ Singleton: A class of which only a single instance can exist
- Structural patterns
+ Adapter: Match interfaces of different classes
+ Bridge: Separates an object’s interface from its implementation
+ Composite: A tree structure of simple and composite objects
+ Decorator: Add responsibilities to objects dynamically
+ Facade: A single class that represents an entire subsystem
+ Flyweight: A fine-grained instance used for efficient sharing
+ Proxy: An object representing another object
- Behavioral patterns
+ Chain of Resp.: A way of passing a request between a chain of objects
+ Command: Encapsulate a command request as an object
+ Interpreter: A way to include language elements in a program
+ Iterator: Sequentially access the elements of a collection
+ Mediator: Defines simplified communication between classes
+ Memento: Capture and restore an object's internal state
+ Observer: A way of notifying change to a number of classes
+ State: Alter an object's behavior when its state changes
+ Strategy: Encapsulates an algorithm inside a class
+ Template Method: Defer the exact steps of an algorithm to a subclass
+ Visitor: Defines a new operation to a class without change