Pattern Languages of Program Design 4  (Software Patterns Series)