Refactoring Guru: https://refactoring.guru/design-patterns Design Patterns In Use: https://github.com/milanm/DesignPatternsInUse
Design patterns generally fall into three categories: creation, structural, and behavioral.
<iframe width="100%" src="https://www.youtube-nocookie.com/embed/ZfG8BSTX0Lw?si=fMoJSp0YDkPStCET" title="YouTube video player" frameborder="1px" style="border-radius: 4px; aspect-ratio: 16/9;" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> ## Creational Patternshttps://refactoring.guru/design-patterns/creational-patterns
Creational patterns are patterns that include object creation mechanisms. It is said they increase flexibility and re-use of existing code.
- Factory Method/Virtual Constructor
- Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
- Builder
- Constructs complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code.
- Singleton
- Ensures that a class has only one instance, while providing a global access point to this instance.
- Abstract Factory
- Produces families of related objects without specifying their concrete classes.
- Prototype/Clone
- Copies existing objects without making your code dependent on their classes.
https://refactoring.guru/design-patterns/structural-patterns
Structural patterns are patterns that explain how to assemble object and classes into larger structures while keeping structures flexible and efficient.
- Adaptor/Wrapper
- Allows objects with incompatible interfaces to collaborate by creating classes that inherit from multiple classes
- Bridge
- Splits a large classes or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently of each other.
- Composite/Object Tree
- Composes objects into tree structures and then work with these structures as if they were individual objects.
- Decorator/Wrapper
- Attaches new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.
- Facade
- Provides a simplified interface to a library, a framework, or any other complex set of classes.
- Flyweight/Cache
- Fits more objects into the available amount of RAM by sharing common parts of state between multiple objects instead of keeping all of the data in each object.
- Proxy
- Provides a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.
https://refactoring.guru/design-patterns/behavioral-patterns
Behavioral Patterns are patterns concerned with algorithms and the assignment of responsibilities between objects.
- Chain of Responsibility
- Passes 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.
- Command/Action/Transaction
- Turns a request into a stand-alone object that contains all information about the request. This transformation lets you pass requests as a method arguments, delay or queue a request’s execution, and support undoable operations.
- Iterator
- Traverses elements of a collection without exposing its underlying representation (list, stack, tree, etc.).
- Mediator/Intermediary/Controller
- Reduces chaotic dependencies between objects. The pattern restricts direct communications between the objects and forces them to collaborate only via a mediator object.
- Memento/Snapshot
- Save and restore the previous state of an object without revealing the details of its implementation.
- Observer
- Defines a subscription mechanism to notify multiple objects about any events that happen to the object they’re observing.
- State
- Allows objects to alter its behavior when its internal state changes. It appears as if the object changed its class.
- Strategy
- Defines a family of algorithms, put each of them into a separate class, and make their objects interchangeable.
- Template Method
- Defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure.
- Visitor
- Separate algorithms from the objects on which they operate.