adding classes for abstract factory