Abstract Factory

Provides an interface for creating families of related or dependent objects without specifying their
concrete classes.
Applicability
- Need to abstract from details of implementation of products
- Need to have multiple families of products
- Need to enforce families of products that must be used together
- Need to hide product implementations and just present interfaces
Consequences
- Isolates concrete classes
- Makes exchanging product families easy
- Promotes consistency among products
- Supporting new kinds (in each family) of products in difficult