Qos architectural patterns for self-architecting software systems
design patterns : elements of reusable object - oriented software .