GECAF: a framework for developing context-aware pervasive systems
design patterns : elements of reusable object - oriented software .