Design patterns explained: a new perspective on object oriented design - Shalloway, Alan; Trott, James R (Software Patterns Series, 2005)