Design Patterns in Java™ - Steven John Metsker; William C. Wake