Curated list of design patterns and idioms using Go (mostly) and other languages such as Python.
Creational patterns provide the capability to create objects based on a required criterion and in a controlled way.
| Pattern | Description | Status |
|---|---|---|
| Abstract Factory | Provides an interface for creating families of related objects without specifying their concrete classes | ✅ |
| Builder | Builds a complex object using simple objects. Allows you to produce different types and representations of an object using the same construction code | ✅ |
| Dependency Injection | A class accepts the objects it requires from an injector instead of creating the objects directly. | ✅ |
| Factory Method | Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created | ✅ |
| Lazy initialization / Lazy Loading | A class that uses lazy initialization to delay the creation of an object until it is first used. | ✅ |
| Multiton | A class that provides a named instances of itself. And provide a global point of access to them. Allows for the controlled creation of multiple instances, which it manages. | ✅ |
| Object pool | Avoid expensive acquisition and release of resources by recycling objects that are no longer in use. Can be considered a generalisation of connection pool and thread pool patterns. | ✅ |
| Prototype | Allows cloning objects, even complex ones, without coupling to their specific classes. | ✅ |
| Resource acquisition is initialization (RAII) | Ensure that resources are properly released by tying them to the lifespan of suitable objects. | ✅ |
| Singleton | Only one object of its kind exists and provides a single point of access to it for any other code ( aka Global variable ) | ✅ |
Structural patterns are about organizing different classes and objects to form larger structures and provide new functionality.
| Pattern | Description | Status |
|---|---|---|
| Adapter | Allows objects with incompatible interfaces to collaborate. | ✅ |
| Bridge | Separates an abstraction from its implementation so that the two can vary independently. | ✅ |
| Composite | Allows you to compose objects into tree structures to represent part-whole hierarchies. | ✅ |
| Decorator | Allows you to attach additional responsibilities to an object dynamically. | ✅ |
| Facade | Provides a unified interface to a set of interfaces in a subsystem. | ✅ |
| Flyweight | An object that minimizes memory usage by sharing some of its data with other similar objects | ✅ |
| Proxy | Provides a substitute or placeholder for another object to control access to it. | ✅ |
Behavioral patterns are about identifying common communication patterns between objects and realizing these patterns.
| Pattern | Description | Status |
|---|---|---|
| Chain of Responsibility | Allows you to pass requests along a chain of objects until one of them can handle the request. | ✅ |
| Command | Allows you to encapsulate a request as an object, thereby letting you parameterize other objects with different requests. | ✅ |
| Interpreter | Allows you to implement an interpreter pattern. | ✅ |
| Iterator | Allows you to traverse a set of objects without exposing its underlying implementation. | ✅ |
| Mediator | Allows you to decouple components that communicate with each other. | ✅ |
| Memento | Allows you to save and restore the state of an object without breaking its encapsulation. | ✅ |
| Observer | Allows you to decouple the subscriber from the publisher (sender) by implementing the publish/subscribe pattern. | ✅ |
| State | Allows you to encapsulate the current state of an object in an object. | ✅ |
| Strategy | Allows you to define a family of algorithms, put each one in a separate class, and make their objects interchangeable. | ✅ |
| Template Method | Allows you to define the skeleton of an algorithm in an operation, deferring some steps to subclasses. | ✅ |
| Visitor | Allows you to separate an algorithm from the data structures that support it. | ✅ |
| Pattern | Description | Status |
|---|---|---|
| Active Object | ❌ | |
| Balking pattern | ❌ | |
| Barrier | ❌ | |
| Double-checked locking | ❌ | |
| Guarded suspension | ❌ | |
| Leaders/followers pattern | ❌ | |
| Monitor Object | ❌ | |
| Nuclear reaction | ❌ | |
| Reactor pattern | ❌ | |
| Read write lock pattern | ❌ | |
| Scheduler pattern | ❌ | |
| Thread pool pattern | ❌ | |
| Thread-local storage | ❌ |