The software Engineering term known as Software Evolution can be understood in two senses. First, as the changes that software experiences over its develop-ment cycle, second, as changes that software goes through in its lifetime. In both cases, software architectures should lead, support and ease any software modifications, reconfiguration or adaptation to a changing environment. At moment, it is widely acknowledged that design and architectural patterns must be used for carrying out any software development focused on quality. We present here the analysis of several design and architectural patterns for sustaining software systems evolution according to two complementary perspectives, one connected with maintainability and the other with dynamicity of any software design.