Singleton is a class that only allows creating a single instance of itself, and exposes simple access to that instanc

Builder is a design pattern that allows the step-by-step construction of complex objects

Adapter is a design pattern that allows converting an interface of a class to the interface expected by a client.

Bridge design pattern allows us to split an inheritance hierarchy into a set of hierarchies, which can then be developed separately from each other. It is the
implementation of the “composition over inheritance” principle, which states that it is better to introduce new features to a class by extending what this class contains, instead of extending the inheritance hierarchy.

Factory Method design pattern allows us to dene an interface for creating objects of a general base type, without specifying what subtype exactly will be created.

Strategy Design pattern is a pattern that allows us to define a family of algorithms to perform some tasks. The concrete strategy can be chosen at runtime.

Template Method is a design pattern that denes the skeleton of an algorithm in the base class. Specic steps of this algorithm are implemented in derived classes.

Decorator is a design pattern that dynamically adds extra functionality to an existing object, without aecting the behavior of other objects from the same class.

Observer design pattern allows objects to notify other objects about changes in their state.