Added factory, base, and subclasses from Project 1. Some refactoring in those classes to fit this app.