Since the seminal book by the Gang of Four, design patterns have proven an important tool in software development. Over time, more and more patterns have been discovered and developed for a plethora of design problems. The sheer amount of patterns available makes it hard to impossible to find patterns useful for solving a specific design problem. Hence, tools supporting searching and finding design patterns appropriate to a certain problem would be very useful. In order to develop such tooling, design patterns need to be described in a formal manner such that querying for them by the problem to be solved becomes feasible. Current approaches to formalising design patterns focus on the solution structure of the pattern rather than on the problem solved by the pattern. In this book, we present a formalisation of the intent of the 23 patterns from the Gang-of-Four book. Based on this formalisation we have developed a Design Pattern Wizard that proposes applicable design patterns based on a description of a design problem. This work is appealing both for the professional software developer, and the student of computer science.