Abstract Factory -wh