Plug & Play Factories
Build abstract classes to encapsulate the responsibility of creating and composing families of related objects.
This will help control the classes of objects that a system creates and promotes independent deployability by enabling the system to create objects without depending on those objects.
This also enforces consistency among classes of objects by forcing the system to use objects from only one family at a time.
This approach enables you to swap factories in and out at runtime, providing real-time flexibility as to how objects are created.