Abstract Factory pattern implementation