Add Factory Design Pattern