Design patterns:Elements of reusable object-oriented software - Gamma,Erich....[et al] (Pearson Education, 2005)