Design Pattern Demo Project
Provides an interface for creating families of related or dependent objects without specifying their concrete class.
Separate the costruction of a complex object from its representation so tahs the same costruction process can create different representations.
Define an interface for creating an object, but let subclasses decide which class to instatiate.
Specify the kinds of objects to create using a prototypical instance, and create new objects by copying the prototype.
Ensure a class allows only one object to be created, providing a single point of access to it.
Convert the interface of a class into the interface clients expect, letting classes work together that couldn't otherwise because of incompatible types.