Gamma, Erich, (et.al)

Disign patterns elements of reusable objected -Oriented software - Pearson & Education