Abstract Factory Design Pattern added ~