A design pattern is a general repeatable solution to a commonly occurring problem in software design.
Design Patterns,
- Can speed up the development process by providing tested, proven development paradigms.
- Improve code readability for coders and architects familiar with the patterns.
- Provide general solutions, documented in a format that doesn't require specifics tied to a particular problem.
- Allow developers to communicate using well-known, well understood names for software interactions.
- Reusing design patterns helps to prevent subtle issues that can cause major problems.
These design patterns are all about class instantiation.
- 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
- Object Pool
Avoid expensive acquisition and release of resources by recycling objects that are no longer in use
- Prototype
A fully initialized instance to be copied or cloned
- Singleton
A class of which only a single instance can exist
These design patterns are all about Class and Object composition.
- 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
- Private Class Data
Restricts accessor/mutator access
- Proxy
An object representing another object
These design patterns are all about Class's objects communication.
- Chain of responsibility
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
- Null Object
Designed to act as a default value of an object
- 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