Abstract Factory

Everyoneone has already eaten a cheese pizza.
It depends on the restaurant, it could be good or bad.
Nonetheless each restaurant calls it "cheese pizza".
Because it respects the "cheese pizza" recipe.
There are lot of pizza restaurants.
The fact is they don't make their pizza in the same way.
They are called"cheese pizza" but they aren't identical.

THIS IS THE ABSTRACT FACTORY DESIGN PATTERN !!!

When you will be in the same situation =
The client does not need to know (or care) which concrete objects it gets.

Don't return concrete objects, just use an abstract factory !!!

The abstract factory will define the factory methods to implement.
These methods will return generic interfaces.
The concrete factories will implement the abstract factory.
They will build the objects in their own way respecting the interfaces.