Factory and AbstractFactory Design Patterns