Design Patterns in C# - Steven John Metsker