LAZY : Adding AbstractFactory design pattern