En enginyeria de programari, un patró de disseny és una solució general a un problema comú i recurrent en el disseny de programari. Un patró de disseny no és un disseny acabat que es pot transformar directament en codi; és una descripció o plantilla per resoldre un problema que es pot utilitzar en moltes situacions diferents.
Els patrons de disseny orientats a objectes normalment mostren relacions i interaccions entre classes o objectes, sense especificar les classes d'aplicació finals o objectes que hi estan implicats. Els algorismes no són considerats patrons de disseny, ja que aquests resolen els problemes computacionals més que els problemes de disseny.
Història
Els patrons sorgiren com a concepte d'arquitectura de la mà de Christopher Alexander. El 1987, Kent Beck i Ward Cunningham començaren a experimentar amb la idea d'aplicar patrons a la programació i van presentar els resultats a la conferència d'OOPSLA aquell mateix any. En els anys següents, Beck, Cunningham i altres investigaren aquell treball.
Els patrons de disseny guanyaren popularitat en la informàtica després de la publicació del llibre Design Patterns: Elements of Reusable Object-Oriented Software l'any 1994.
Objectius dels patrons
Els patrons de disseny pretenen:
- Proporcionar catàlegs d'elements reusables en el disseny de sistemes de programari.
- Evitar la reiteració a la recerca de solucions a problemes ja coneguts i solucionats anteriorment.
- Formalitzar un vocabulari comú entre dissenyadors.
- Estandarditzar el mode en el que es realitza el disseny.
- Facilitar l'aprenentatge de les noves generacions de dissenyadors condensant coneixement ja existent.
Tanmateix, no pretenen:
- Imposar certes alternatives de disseny enfront d'altres.
- Eliminar la creativitat inherent al procés de disseny.
No és obligatori utilitzar els patrons, només és aconsellable en el cas de tenir el mateix problema o similar que soluciona el patró, sempre tenint en compte que en el cas particular pot no ser aplicable. "Abusar o forçar l'ús dels patrons pot ser un error".
Relació de principals patrons gang of four (GoF)
- Patrons creacionals
- Abstract Factory (fàbrica abstracta): Permet treballar amb objectes de diferents famílies de manera que aquestes famílies no es barregin, però fent que el tipus de familia utilitzat sigui transparent.
- Factory Method (mètode de fabricació): Centralitza en una classe constructora la creació d'objectes d'un subtipus d'un tipus determinat, ocultant a l'usuari la casuística per escollir el subtipus a crear.
- Builder (constructor virtual): Abstrau el procés de creació d'un objecte complex, centralitzant-lo en un únic punt.
- Prototype (prototip): Crea nous objectes clonant-los d'una instància existent.
- Singleton (instància única): Garanteix l'existència d'una única instància per una classe i la creació d'un mecanisme d'accés global per aquesta instància.
- Patrons estructurals
- Adapter (adaptador): Adapta una interfície perquè pugui ser utilitzada per una classe que, d'altra manera, no podria.
- Bridge (Pont): Desacobla una abstracció de la seva implementació.
- Composite (objecte compost): Permet tractar objectes compostos com si es tractés d'un de sol.
- Decorator (embolcall): Afegeix funcionalitats a una classe dinàmicament.
- Facade (façana): Proveeix d'una interfície unificada simple per accedir a una interfície o grup d'interfícies d'un subsistema.
- Flyweight (pes lleuger): Redueix la redundància quan gran quantitat d'objectes posseeixen idèntica informació.
- Proxy: Manté un representant d'un objecte.
- Patrons de comportament
- Cadena de responsabilitat (cadena de responsabilitat): Permet establir la línia que han de seguir els missatges perquè els objectes executin una tasca indicada.
- Command (ordre): Encapsula una operació en un objecte, permetent executar aquesta operació sense necessitat de conèixer-ne el contingut.
- Interpreter (intèrpret): Donat un llenguatge, en defineix la gramàtica així com les eines necessàries per interpretar-lo.
- Iterator (iterador): Permet realitzar recorreguts sobre objectes compostos independentment de la seva implementació.
- Mediator (mediador): Defineix un objecte que coordini la comunicació entre objectes de diferents classes, però que funcionen com un conjunt.
- Memento (record): Permet tornar a estats anteriors del sistema.
- Patró observador: Defineix una dependència d'un a molts entre objectes, de manera que quan un objecte canvia d'estat es notifiqui i s'actualitzin automàticament tots els objectes que en depenen.
- State (estat): Permet que un objecte canviï el seu comportament cada vegada que canviï el seu estat intern.
- Patró estratègia: Permet disposar de diversos mètodes per a resoldre un problema i escollir-ne un en temps d'execució.
- Template Method (Mètode plantilla): Defineix en una operació l'esquelet d'un algorisme, delegant a les subclasses alguns dels passos, el que permet que les subclasses redefineixin certs passos d'un algorisme sense canviar-ne l'estructura.
- Visitor (visitant): Aquest patró serveix per indicar que algú (visitador) ha visitat quelcom i així saber que ha estat visitat per un visitador.
Vegeu també
Enllaços externs
|
---|
Creacional | |
---|
Estructural | |
---|
Comportament | |
---|