Un patró de disseny és una plantilla per un disseny que soluciona un problema general i recurrent en un context en particular. És una eina d'abstracció que es útil en casos com l'arquitectura i la enginyeria així com en el desenvolupament de programari. Les següents seccions resumeixen que són els patrons de disseny, explicant perquè són importants pel disseny orientat a objectes, i mirant un exemple de patró de disseny.
Com a desenvolupador, estaràs familiaritzat amb les nocions dels patrons de disseny en la programació orientada a objectes. Foren descrits i catalogats per primer cop en el llibre Patrons de Disseny: Elements pel Programari Orientat a Objectes Reutilitzables de Eric Gamma, Richard Helm, Ralph Johnson i John Vlissides (normalment anomenats els "La Colla dels Quatre"). Aquest llibre, publicat originalment el 1994, fou seguit per altres llibres i articles que exploraven i elaboraven patrons de disseny en sistemes orientats a objectes.
La definició succinta d'un patró de disseny és "una solució a un problema en un context". Analitzem-ho anant enrera per la frase. El context és un situació recurrent en que s'aplica el patró. El problema és l'objectiu que has d'intentar aconseguir en aquest context amb qualsevol restricció que vingui amb el context. I la solució és el que obtindràs: un disseny general pel context que aconsegueix l'objectiu i resol les restriccions.
Varis temes o principis del disseny influeixen el patrons de disseny. Aquests principis de disseny són regles de treball per construir sistemes orientats a objectes, com ho són "encapsular els aspectes d'una estructura de sistema que varia" i "programar una interfície, no una implementació". Expressen idees importants. Per exemple, si aïlles les parts d'un sistema que varien i els encapsulem, poden variar independentment d'altres parts del sistema, especialment si defineixes interfícies per ells que no estan limitades a implementacions específiques. Més tard pots alterar o estendre aquestes parts variables sense afectar a altres parts del sistema. Així elimines dependències i redueixes les lligadures entre parts, i conseqüentment el sistema arriba a ser més flexible i robust davant els canvis.
Beneficis com aquests fan dels patrons de disseny una consideració important quan estas escrivint programari. Si trobes, adaptes i utilitzes patrons en els teus dissenys de programari, que programes -- i als objectes i classes que compren -- serà més re-utilitzable, més extensible i més senzill de canviar quan els requeriments futurs ho demanin. A més, els programes que estan basats en patrons de disseny són normalment més elegants i eficients que els programes que no ho són, així com necessitar menys línies de codi per aconseguir el mateix objectiu.
La majoria del llibre del "La Colla dels Quatre" consisteix d'un catàleg de patrons de disseny. Aquest categoritza els patrons dins el catàleg per l'àmbit (classe o objecte) i per propòsit (de creació, d'estructura o de comportament). Cada apartat en aquest catàleg parla de la decisió, motivació aplicativitat, estructura, participants, col·laboracions, conseqüències i implementació d'un patró de disseny. Una d'aquests apartats és el patró Comanda (un patró objecte-comportament).
L'estat creació del patró Comanda és per "encapsular una petició en un objecte, permetent parametritzar clients amb diferents peticions, encuar-los o registrar peticions i suportar operacions desfer". Els patrons separen un objecte que envia un missatge dels objectes que reben i avaluen aquests missatges. El generador del missatge (el client) encapsula una petició ajuntant una o més accions en un receptor específic. El missatge encapsulat pot passar-se entre objectes, situat en cues o altres sistemes d'emmagatzemament per invocar-los més endavant i modificats dinàmicament per variar els paràmetres del receptor o del missatge. La Figura 1 mostra el diagrama de l'estructura del patró.
Figura 1: Diagrama d'Estructura pel patró Comanda
Per un desenvolupador familiaritzat amb Cocoa, aquesta descripció imprecisa del patró Comanda fer veure la llum. El patró descriu perfectament una classe en la framework Foundation el propòsit del qual és encapsular missatges: NSInvocation. Com a estat de creació del patró, un dels seus propòsits es desfer operacions. Els objectes Invocació s'utilitzen en els dissenys Cocoa per gestionar el desfer així com els objectes distribuïts, els quals és una arquitectura per la comunicació entre-processos. El patró Comanda també descriu (encara menys perfectament) el paradigma acció-objectiu de Cocoa en que els objectes de control de la interfície d'usuari encapsula l'objectiu i l'acció dels missatges que envien quan els usuaris els activen.
En aquestes classes de la framework i en aquests llenguatges i sistemes d'execució, Cocoa ja té implementats molts dels patrons de disseny catalogats per a tu. (Aquestes implementacions estan descrites a "Com Cocoa Adapta els Patrons de Disseny"). Pots satisfer molts dels teus requeriments de desenvolupament utilitzant algun d'aquestes adaptacions d'un patró de disseny. L'important és conèixer els patrons quan estàs desenvolupant programari i el seu ús en els teus disseny.