Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. Defining a "virtual" constructor. The new operator considered harmful. https://github.com/maiermarc75/design_pattern/blob/main/patterns/factory.py)
Provide an interface for creating families of related or dependent objects without specifying their concrete classes. A hierarchy that encapsulates: many possible "platforms", and the construction of a suite of "products". The new operator considered harmful. https://github.com/maiermarc75/design_pattern/blob/main/patterns/abstract_factory.py)
Separate the construction of a complex object from its representation so that the same construction process can create different representations. Parse a complex representation, create one of several targets. https://github.com/maiermarc75/design_pattern/blob/main/patterns/builder.py)
Object pooling can offer a significant performance boost; it is most effective in situations where the cost of initializing a class instance is high, the rate of instantiation of a class is high, and the number of instantiations in use at any one time is low. https://github.com/maiermarc75/design_pattern/blob/main/patterns/pool.py)
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. Co-opt one instance of a class for use as a breeder of all future instances. The new operator considered harmful. https://github.com/maiermarc75/design_pattern/blob/main/patterns/prototype.py
Ensure a class has only one instance, and provide a global point of access to it. Encapsulated "just-in-time initialization" or "initialization on first use". https://github.com/maiermarc75/design_pattern/blob/main/patterns/singleton.py