Object-Oriented Design and Patterns, 2nd Edition (Cay S. Horstmann)