Viziunea lui Steven Metsker asupra şabloanelor GoF
May 17th, 2013 | By Dumitru | Category: Proiectare și programareClasificarea prezentată de Steven Metsker în Design patterns: Java WorkBook (2002) este realizată în scopul organizării şabloanelor de proiectare GoF (cel puţin aşa susţine autorul).
Şi deoarece anume „intenţia” stabileşte potenţialul de aplicare al şablonului într-un context determinat, nu-mi pare de loc straniu că drept criteriu de clasificare a servit chiar ea.
Intenţia, după Metsker, exprimă necesităţi ce nu pot fi realizate utilizînd doar instrumente de limbaj. Astfel analizînd intenţiile şabloanelor din această perspectivă autorul obţine următoarele categorii de şabloane:
Intention |
||||
Interface |
Responsibility |
Construction |
Operation |
Extension |
|
|
|
|
|
Şabloane Interface
Şabloanele din grupul Interface definesc/redefinesc accesul la metodele unei clase sau grupe de clase:
- Adapter – adaptează interfaţa clasei la necesităţile clasei client;
- Facade – oferă o interfaţă simplă şi unică la o colecţie de clase;
- Composite – defineşte o interfaţă comună aplicată unui obiect şi grupului ierarhic la care face parte şi obiectul;
- Bridge – prin separarea abstractizării interfaţează implementarea care este realizată independent.
Şabloane Responsibility
Principiul obiect-orientat al încapsulării implică distribuirea responsabilităţilor, astfel încât fiecare obiect îşi are misiunea sa localizată. Acest lucru este firesc, dar există un set de şabloane care ne permit transferul de responsabilităţi spre un obiect intermediar sau unul specificat:
- Singleton – centralizează responsabilitatea într-o singură instanţă a clasei;
- Observer – separă responsabilităţile şi le localizează în clase distincte (adică decuplează clasa şi responsabilitatea ei de informare, pe care o localizează într-o altă clasă);
- Mediator – permite cuplarea slabă între obiectele unui set, centralizînd responsabilitatea de „mediere” a interacţiunii lor;
- Proxy – admite unui obiect să acţioneze în numele altuia;
- Chain Of Responsibility – permite devierea „responsabilităţii” de prelucrare a unei cereri printr-un lanţ format de obiecte;
- Flyweight – poate factoriza o parte comună de responsabilităţi ale unui grup de obiecte.
Şabloane Construction
Crearea obiectelor în orice limbaj obiect-orientat este realizată de către constructori. Deşi colaborările dintre constructorii claselor de bază şi claselor derivate, precum şi dintre constructorii aceleaşi clase, oferă o anumită flexibilitate în instanţierea obiectelor, totuşi aceste mijloace în unele circumstanţe sunt insuficiente. Astfel şabloanele acestei categorii sunt recomandate în acele situaţii, cînd crearea trivială a obiectelor cu ajutorul operatorului new nu este soluţia cea mai bună, ba din contra este nedorită sau chiar malefică.
- Builder – permite colectarea treptată a informaţiei despre obiect anticipând construcţia acestuia;
- Factory Method – permite unei clase să cedeze derivatelor sale decizia de instanţiere a obiectelor;
- Abstract Factory – construieşte o familie de obiecte ce partajează trăsături comune;
- Prototype – creează un obiect asemeni altuia;
- Memento – reconstruieşte un obiect din starea sa anterioară.
Şabloane Operation
Dacă să înţelegem operaţiile ca fiind specificaţii ale serviciilor şi metodele ca fiind implementări de operaţii, atunci şabloanele acestei categorii utilizând ideea polimorfismului permit realizarea serviciilor în cele mai diverse moduri.
- Template Method – implementează un algoritm într-o metodă a clasei astfel, încât anumiţi paşi să fie definiţi de clasele sale descendente;
- State – distribuie operaţia în clase diferite, considerate stări distincte
- Strategy – încapsulează operaţia oferind implementări alternative interschimbabile;
- Command – încapsulează un apel de metodă într-un obiect;
- Interpreter – distribuie operaţia astfel, încât implementările se aplică diferitor părţi ale unei structuri compuse
Şabloane Extension
Programarea obiect orientată permite extensia de funcţionalităţi prin moştenire sau compoziţie (delegare). Aceste mijloace de limbaj sunt fundamentale şi determină o relaţie tradiţională între două clase. Dar în cazul unor extensiuni mai deosebite am putea utiliza şabloanele acestei categorii care ne permit adăugarea de comportament specific unei colecţii de obiecte sau adăugarea de comportament fără alterarea claselor de bază.
- Decorator – ataşează dinamic responsabilităţi adiţionale unui obiect;
- Iterator – oferă posibilitatea de accesare a unei colecţii de obiecte create;
- Visitor – permite adăugarea de noi operaţii claselor fără modificarea lor.