Added Factory Method Design Pattern