optimized Abstract Factory