Separate Main into Controller Pattern (MVC)

Split Main into Main, ModelView, and ModelViewController
Rename Flyweight to AbstractFactory