CS 480 - Software engineering class - an exercise in some basic design patterns