What is the Abstract Factory Pattern?
The Abstract Factory Pattern provides an interface for creating families of related or compatible objects without requiring client code to know their concrete classes. It is useful when several products must vary together.