Software design patterns are approved and well-known to software developers. Knowledge about the design patterns applied in a software system is crucial for preparing the system's design changes, since patterns often describe how software can be extended or adapted. If usages of design patterns are not appropriately documented or known, this can evidently lead to increased maintenance effort, design flaws, and eventually to design erosion. In this thesis, in order to reduce the risk for design flaws and to support developers in applying design patterns, I introduce my model-driven approach for semi-automatically applying design patterns as well as automatically documenting and validating the resulting pattern implementations. Developers are led through the step of applying a design pattern in a software design model. According to the developer's choices, a pattern implementation is generated in the design model. In addition, the applied pattern (the pattern roles and their implementations) is accurately and automatically captured in a separate model. Due to their explicit capturing, pattern implementations can be highlighted while viewing the software design, e.g. in class diagrams, or be presented separately (i.e. the pattern usages are documented). Hence, pattern implementations can hardly be missed during design changes. Different views and levels of detail are offered to visualise the precisely captured model of applied patterns. After changing the software design model, its conformance to the design patterns in use can automatically be checked by means of the detailed model of all applied patterns. Violations are automatically revealed. This way, developers can consciously replace earlier pattern implementations with other design solutions or revise their accidental design deviations.