Design Pattern
Creational Patterns: How Objects Are Created
1. Factory
Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
2. Abstract Factory
Abstract Factory is a creational design pattern that lets you produce families of related objects without specifying their concrete classes.
3. Singleton
Singleton is a creational design pattern that lets you ensure that a class has only one instance, while providing a global access point to this instance.
4. Prototype
Prototype is a creational design pattern that lets you copy existing objects without making your code dependent on their classes.
Structural Patterns: How Objects Relate to Each Other
1. Adapter
Adapter is a structural design pattern that allows objects with incompatible interfaces to collaborate.
2. Decorator
Decorator is a structural design pattern that lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.
3. Bridge
Bridge is a structural design pattern that lets you split a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently of each other.
4. Facade
Facade is a structural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classes.
Behavioral Patterns: How Objects Communicate with Each Other
1. Chain Of Responsibility
Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain.
2. Strategy
Strategy is a behavioral design pattern that lets you define a family of algorithms, put each of them into a separate class, and make their objects interchangeable.
3. State
State is a behavioral design pattern that lets an object alter its behavior when its internal state changes. It appears as if the object changed its class.