Adding some classes to implement the abstract factory