Used for a design pattern exercise in CS 246.