Added Abstract factory design pattern