All 23 GoF Design Patterns
Design Patterns in NestJS
A comprehensive guide to the Gang of Four design patterns, implemented with real-world e-commerce examples using NestJS, TypeScript, and dependency injection.
Pattern Categories
Three categories covering object creation, composition, and communication.
Creational
5 patternsPatterns that deal with object creation mechanisms, trying to create objects in a manner suitable to the situation.
Explore patternsStructural
7 patternsPatterns that ease the design by identifying a simple way to realize relationships among entities.
Explore patternsBehavioral
11 patternsPatterns that are concerned with algorithms and the assignment of responsibilities between objects.
Explore patternsAll 23 Patterns
Every Gang of Four pattern with NestJS implementation and TypeScript code.
Singleton
Ensure a class has only one instance and provide a global point of access to it.
Factory Method
Define an interface for creating an object, but let subclasses decide which class to instantiate.
Abstract Factory
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
Builder
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Prototype
Create objects by cloning a prototype rather than constructing from scratch.
Adapter
Convert the interface of a class into another interface clients expect.
Bridge
Decouple an abstraction from its implementation so that the two can vary independently.
Composite
Compose objects into tree structures to represent part-whole hierarchies.
Decorator
Attach additional responsibilities to an object dynamically.
Facade
Provide a unified interface to a set of interfaces in a subsystem.
Flyweight
Use sharing to support large numbers of fine-grained objects efficiently.
Proxy
Provide a surrogate or placeholder for another object to control access to it.
Chain of Responsibility
Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.
Command
Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
Interpreter
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
Iterator
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
Mediator
Define an object that encapsulates how a set of objects interact.
Memento
Capture and externalize an object's internal state so that the object can be restored to this state later.
Observer
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
State
Allow an object to alter its behavior when its internal state changes.
Strategy
Define a family of algorithms, encapsulate each one, and make them interchangeable.
Template Method
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.
Visitor
Represent an operation to be performed on the elements of an object structure.