Program ready, Utilizes Factory pattern and observer Pattern