Implementing design patterns as parametric aspects using ParaAJ: The case of the singleton, observer, and decorator design patterns. (April 2016)