Ce este un șablon de proiectare
Un șablon de proiectare (design pattern) este o soluție cu nume, verificată în practică, pentru o problemă care apare din nou și din nou în proiectarea software. Șabloanele nu sunt cod pe care îl copiezi — sunt forme pe care le recunoști: „aceasta este o problemă de împachetare”, „aceasta este o problemă de notificare”.
Catalogul clasic conține 23 de șabloane, adunate de patru autori cunoscuți ca Gang of Four („Banda celor patru”). Cunoașterea lor îți oferă două lucruri: răspunsuri gata pregătite pentru probleme frecvente și un vocabular comun — a spune „folosește aici un adaptor” înlocuiește un paragraf întreg de explicații.
Cele trei familii
Cele 23 de șabloane se împart în trei familii:
Creaționale — cum sunt create obiectele: Singleton, Metoda fabrică, Fabrica abstractă, Constructor, Prototip.
Structurale — cum se potrivesc lucrurile între ele: Adaptor, Punte, Compozit, Decorator, Fațadă, Flyweight, Proxy.
Comportamentale — cum comunică lucrurile între ele: Lanț de responsabilitate, Comandă, Interpretor, Iterator, Mediator, Memento, Observator, Stare, Strategie, Metoda șablon, Vizitator.
Fiecare șablon din acest grup are propria pagină: ce este, un exemplu care poate fi rulat, când să îl folosești, precum și avantajele și dezavantajele lui.
Șabloanele în stilul Python
Catalogul a fost scris pentru limbaje construite în jurul claselor și al moștenirii. Python le are pe amândouă, așa că șabloanele se transpun direct — dar are și duck typing și funcții de primă clasă, iar fiecare pagină de aici le folosește acolo unde ajută.
Unele șabloane devin mult mai simple în Python (o strategie este doar o funcție, un iterator este doar un generator); câteva aproape că nu mai sunt necesare deloc. Fiecare pagină spune acest lucru sincer.
Un avertisment înainte să începi: șabloanele sunt unelte, nu scopuri. Folosirea unui șablon acolo unde ar fi suficientă o funcție simplă face codul mai rău. Apelează la un șablon atunci când simți problema pe care o rezolvă — niciodată înainte.