Achieving Adaptivity through Strategies in a Distributed Software Architecture