Added Abstract Factory Design Pattern