> For the complete documentation index, see [llms.txt](https://claudiu-stanciu.gitbook.io/software-craft/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://claudiu-stanciu.gitbook.io/software-craft/patterns/software-patterns.md).

# Software patterns

Aka how to code and not reinvent the bloody wheel again

Stolen shamelessly from <https://sourcemaking.com/design_patterns>

## Creational

* Factory = create an object by specifying the type
* Abstract factory = create an object factory by specifying the type
* Builder = build a complex object by separating the construction from the representation (construction is outside the class definition) and construction should be like an assembly.
* Pool = create a pool of objects to reuse, instead of create/destroy cycles
* Singleton = single instance / manager object
* Prototype = create object by copying an existing one

## Structural

* Adapter = adapt from 1 interface to another
* Bridge = separate object abstraction(interface) from implementation, and rely on abstraction ( dependency inversion)
* Composite
* Decorator
* Facade
* Flyweight
* Private class data
* Proxy

## Behavioural

* Chain of responsibility
* Command
* Interpreter
* Mediator
* Memento
* Null object
* Observer
* State
* Strategy
* Template
* Visitor
