1
Erich Gamma et al.,
Design Patterns: Elements of Resuable Object-Oriented Software
, Addison Wesley Longman, 1997.