Writing Software Patterns

Martin Fowler

Number of words 980
Computer science content medium
Business content medium
English language complexity medium

Sub-areas covered

Software engineering

Learning objectives


design pattern (wzorzec projektowy)
a general repeatable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.
patterns book
a book on design patterns
identity map
a database access design pattern used to improve performance by providing a context-specific in-memory cache to prevent duplicate retrieval of the same object data from the database
decorator pattern
a design pattern that allows new/additional behaviour to be added to an existing class dynamically
a book of recipes and solutions for different problems encountered in writing software, usually connected with a particular programming language and platform


Martin Fowler is a famous author and international speaker on software architecture, specializing in object-oriented analysis and design, UML, patterns, and agile software development methodologies, including extreme programming. His article is a kind of introduction to the software design process. He is trying to show, with a handful of examples, why design patterns are important in software engineering.

Martin Fowler, autor licznych prac związanych z inżynierią oprogramowania, specjalizujący się między innymi w projektowaniu i programowaniu obiektowo-orientowanym, UML, wzorcach projektowych i “zwinnych” technikach wytwarzania oprogramowania (agile software development methodologies), w tym także w technice programowania “ekstremalnego”. Jego artykuł stanowi rodzaj wstępu do opisu procesu projektowania oprogramowania. Autor wyjaśnia znaczenie wzorców projektowych w tym procesie, popierając swoją wypowiedź licznymi przykładami.

Pre-reading questions

  1. What do you think might help in building software? What could make this process faster and more effective?
  2. Do you think that using ordinary solutions might help or would that be useless in a specific task?
  3. What types of software patterns do you know? Which one is your favourite and why?