Design patterns help system designers apply proven solutions to commonly occurring problems in particular contexts. Patterns are usually described informally. While such informal descriptions are valuable, if we want to be sure that designers apply the patterns as intended, and are able to reliably predict the resulting behaviors their systems can be expected to exhibit, we also need precise ch...