implementation of design patterns from C# 3.0 Design Patterns book by Judith Bishop