finished abstract factory - added new files