Adding the Abstract Factory pattern.