create an abstract factory class to use as the base for IFactory Implementors