Essential Software Design Patterns

Walter F. Tichy

University of Karlsruhe


Introduction

A software design pattern describes a family of solutions to a software design problem. It consists of one or several software design elements such as modules, interfaces, classes, objects, methods, functions, processes, threads, etc., relationships among the elements, and a behavioral description. Example design patterns are Model/View/Controller, Blackboard, Client/Server, and Process Control.

The purpose of design patterns is to capture software design know-how and make it reusable. Design patterns can improve the structure of software, simplify maintenance, and help avoid architectural drift. Design patterns also improve communication among software developers and empower less experienced personnel to produce high-quality designs.

This document catalogues a large number of software design patterns from a variety of sources, in particular from the literature on software architecture and various books and conferences about design patterns. The "classics" such as Layered System, Pipe, Module, Event Channel, and Repository are also included. The aim is to produce a coherent catalogue of general purpose patterns, i.e., patterns that can be used in many systems regardless of application domain. The catalogue is ordered according to the purpose of the patterns. ( Here is more on how patterns were selected.)

Note: The definitions of the patterns are not included. The purpose of this document is only to organize existing design patterns into a coherent structure. Thus, the reader should already be familiar with most patterns, for example those in the book by Gamma et al.

The Design Pattern Catalogue

  • Decoupling
  • Integration
  • Variant Management
  • Data Management
  • Control
  • Virtual Machines
  • Convenience Patterns
  • Compound Patterns
  • These pattern categories aren't finished yet:

  • Concurrency
  • Distribution
  • For an experiment on the effect of pattern use in maintenance, see this short paper .
    Next group