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.