Un design pattern può essere definito come "una soluzione progettuale generale a un problema ricorrente" (da Wikipedia),  un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software.

Sempre da Wikipedia:
Si possono paragonare ad elementi architettonici che possono essere usati nello sviluppo di software diversi, ma accomunati da problematiche simili; non a caso alcuni, come la facciata (façade) richiamano elementi architettonici tradizionali.


Il concetto di design pattern nasce infatti in architettura: Christopher Alexander, architetto austriaco, nota che nella costruzione di edifici ci sono problemi progettuali ricorrenti e descrive le migliori soluzioni note nel libro “A Pattern Language” (1977).

Nel 1995, 4 tra i più noti ingegneri del software, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides (conosciuti anche come la “Gang of Four”), riportano gli stessi concetti all’informatica, pubblicando il libro “Design Patterns: Elements of Reusable Object-Oriented Software”, una sorta di catalogo di soluzioni tipiche di design.


Jason McDonald ha pubblicato un comodo cheat-sheet che riassume i principali concetti, potete scaricarlo da QUESTO LINK.