Consider applying creational patterns when: A system should be independent of how its objects and products are created. A set of related objects is designed to be used together. Hiding the implementations of a class library or product, revealing only their interfaces. Constructing different representation of independent complex objects. A class wants its subclass to implement the object it creates. The class instantiations are specified at run-time. There must be a single instance and client can access this instance at all times. Instance should be extensible without being modified. Structure Below is a simple class diagram that most creational patterns have in common. Note that different creational patterns require additional and different participated classes. Participants: Creator: Declares object interface. Returns object. ConcreteCreator: Implements object's interface. Examples Some examples of creational design patterns include: Abstract Factory pattern: a class requests the objects it requires from a factory object instead of creating the objects directly Factory method pattern: centralize creation of an object of a specific type choosing one of several implementations Builder pattern: separate the construction of a complex object from its representation so that the same construction process can create different representations Dependency Injection pattern: a class accepts the objects it requires from an injector instead of creating the objects directly Lazy initialization pattern: tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed Object pool pattern: avoid expensive acquisition and release of resources by recycling objects that are no longer in use Prototype pattern: used when the type of objects to create is determined by a prototypical instance, which is cloned to produce new objects Singleton pattern: restrict instantiation of a class to one object See also Constructor Behavioral pattern Concurrency pattern Structural pattern References Software design patterns