added files for abstract factory