Uses Factory Method and Abstract Factory method