Design patterns : elements of reusable object-oriented software - Gamma, Erich, 1961- , (Pearson, 2018)