https://medium.com/@andreagernone/mastering-design-patterns-04-a-comprehensive-guide-to-the-abstract-factory-pattern-60c4a25bff9f