Abstract Factory

The abstract factory pattern in software engineering is a design pattern that provides a way to create families of related objects without imposing their concrete classes, by encapsulating a group of individual factories that have a common theme without specifying their concrete classes - Source: Abstract factory pattern - Wikipedia 

You will commonly see this pattern being used in applications that work with relational databases. It solves the issue of directly instantiating concrete classes that make those classes hard dependencies of the class that uses it, by decoupling client code from these concrete class implementations. By using this pattern, the client code interacts only with a high-level blueprint (abstract class or interface), thus decoupling it from implementation details.

This pattern also allows for easy adaptation for new types or new families without modifying existing client code.  By following the pattern's rules, you can introduce new concrete factories for the new types. The existing client code will remain unchanged or have very minimal change as long as it interacts with the abstract factory interface.

Sample implementations in C#, C++ and Python : Design Patterns - AbstractFactory (github.com)