Adding FActory and Abstract Factory Design pattern