https://medium.com/@pratiksingh.raman/power-of-abstract-factory-in-design-patterns-with-code-examples-in-laravel-d55aa8c7d453