Abstract Factory design pattern added.