Spesso il programmatore si trova di fronte a problemi simili a quelli che ha già risolto in precedenza, la cui soluzione è quindi ricorrente.
Questi problemi e queste soluzioni ricorrenti possono essere descritte con dei diagrammi di classe (struttura logica).
Le soluzioni sono state raccolte e gli è stato assegnato un nome per poterle riutilizzare facilmente.
Queste strutture (pattern) possono essere raggruppate in
- creational pattern
- structural pattern
- behavioral pattern (strategic patter?)