Creates an instance of several families of classes
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
An Abstract Factory creates objects that are related by a common theme. In object-oriented programming a Factory is an object that creates other objects. An Abstract Factory has abstracted out a theme which is shared by the newly created objects.