Abstract factory pattern, which provides an interface for creating related or dependent objects without specifying the objects' concrete classes.[3] Builder pattern, which separates the construction of a complex object from its representation so that the same construction process can create different representations.