This is for the design patterns assignment