An implementation of 'Design Patterns: Elements of Reusable Object-Oriented Software', for the purpose of learning.