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.