Observer pattern using aspect-oriented programming
design patterns : elements of reusable object - oriented software .