Update of Factory Pattern Design.
Need to test, and refine.