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

# Design Pattern

- [Creational - Singleton](https://jrp.gitbook.io/notes/design-pattern/creational-singleton.md): Multiple ways to implement singleton design pattern, but what should you use?
- [Creational - Factory Pattern](https://jrp.gitbook.io/notes/design-pattern/creational-factory-pattern.md)
- [Creational - Abstract Factory Pattern](https://jrp.gitbook.io/notes/design-pattern/creational-abstract-factory-pattern.md)
- [Creational - Builder Pattern](https://jrp.gitbook.io/notes/design-pattern/creational-builder-pattern.md): Builder pattern lets you create complex object step by step.
- [Structural - Decorator Pattern](https://jrp.gitbook.io/notes/design-pattern/structural-decorator-pattern.md): This Pattern helps to add more functionality over the base object.
- [Structural - Proxy Pattern](https://jrp.gitbook.io/notes/design-pattern/structural-proxy-pattern.md): The proxy acts as an intermediary, controlling access to the real object
- [Structural - Adaptor Pattern](https://jrp.gitbook.io/notes/design-pattern/structural-adaptor-pattern.md): This pattern acts as a bridge between two incompatible pattern.
- [Structural - Facade Pattern](https://jrp.gitbook.io/notes/design-pattern/structural-facade-pattern.md): This pattern helps to hide the system's complexity from the client
- [Structural - Bridge Pattern](https://jrp.gitbook.io/notes/design-pattern/structural-bridge-pattern.md): It helps you build apps/systems where you mix-and-match features  without creating a big mess
- [Behavioural - Observer Pattern](https://jrp.gitbook.io/notes/design-pattern/behavioural-observer-pattern.md): Observable maintains a list of Observers and notifies them one when there is any change in its state.
- [Behavioural - State Pattern](https://jrp.gitbook.io/notes/design-pattern/behavioural-state-pattern.md): It allows an object to alter its behaviour/context when the state gets changed.
- [Behavioural - Strategy Pattern](https://jrp.gitbook.io/notes/design-pattern/behavioural-strategy-pattern.md): It helps to define multiple Strategies for the same task and user can select any strategy
- [Behavioural - Chain Of Responsibilities](https://jrp.gitbook.io/notes/design-pattern/behavioural-chain-of-responsibilities.md): Chain of Responsibilities pattern allows multiple objects to process the request without the sender needing to know which object processed the request.
