Changed Factory Pattern to use Abstract instead of interface