modele de proiectare în Java

Sunt sigur că fiecare programator auzit expresia „modele de design“ (sau modele). În cazul în care foarte scurt - o descriere a problemelor care apar atunci când scrie cod orientat pe obiect, precum și exemple de soluții la aceste probleme.

Dar, după cum a spus cineva înțelept, - modele necesare pentru a ajuta la realizarea unei idei, și nu pentru a se potrivi în cadrul ideii unui anumit model.

Sper că seria mea de articole vă va ajuta să păstrați se răcească în utilizarea de modele și, astfel, să extindă cunoștințele lor din OEP.

Ca bază vom lua un catalog de modele din cartea GOF - Design Patterns. Și apoi cum merge :).

În fiecare articol, voi încerca:

  • explica de ce un anumit model are nevoie;
  • da un exemplu de utilizare a acestuia, în măsura în care este posibil din proiectele Java reale în care am luat parte;
  • spune despre caracteristicile, miturile și capcane;
  • specificați în cazul în care pentru a găsi modelul în punerea în aplicare a JDK.

Modele de a crea obiecte

Primul grup - este modele creaționale. Ele sunt în grade diferite, sunt de lucru cu mecanismele de creare a obiectelor.

  • Singleton - să asigure existența sistemului exact o instanță a unei clase;
  • Metoda Factory - deleagă procesul de creare a obiectelor clase derivate;
  • obiecte clona bazate pe un obiect de bază - prototip;
  • Builder - separa procesul de creare a unui obiect complex de reprezentarea;
  • Fabrica de Abstract - descriu esența pentru a crea familii întregi de obiecte legate.

modele structurale

Al doilea grup - modele structurale (structurale). Ele descriu crearea mai multor obiecte complexe, sau de a face mai ușor de a lucra cu alte obiecte RECIRCULARE.

  • Adaptor - pe baza unei clase de a crea interfața client necesară;
  • Fatade - descrie o interfață unificată pentru operare ușoară, cu un set de sub-sisteme;
  • Composite - funcționează cu baza și obiecte compozite într-un mod unitar;
  • Decorator - adăugați dinamic o nouă funcționalitate la un anumit obiect, păstrând interfața sa;
  • Proxy - a crea un obiect care intercepteaza apelurile către un alt obiect;
  • Podul - împărtășim abstractia a interfeței, permițându-le să varieze în mod independent;
  • Muscă - lucrează eficient cu un număr mare de obiecte similare.

modele de design de comportament

În fine, al treilea grup - modelele comportamentale (comportament). Ei identifica modalități eficiente de interacțiune a diferitelor obiecte din sistem.

  • Strategia - descrie un set de algoritmi interschimbabile cu o singură interfață;
  • Iterator - oferă acces la colecțiile de obiecte fără a expune structura internă a acestor colecții;
  • Observer - a crea un obiect pentru a urmări modificările în cadrul subsistemului de notificare și alte subsisteme;
  • Memento - păstrează starea internă a unui obiect pentru o utilizare ulterioară, fără a încălca încapsulare;
  • Comandă - descrie un obiect care reprezintă o acțiune care poate fi realizată la momentul dorit;
  • Interpret - stabilesc metoda de calcul expresiile unei limbi;
  • Mediatorul - creează un obiect care controlează interacțiunea între un set de subsisteme;
  • Statul - permite obiectelor să își schimbe comportamentul atunci când schimbă starea sa internă;
  • Metoda Template - vom descrie un algoritm care atribuie punerea în aplicare a unor părți ale algoritmului în subclase;
  • Visitor - detașabilă din structura algoritmului, care funcționează algoritmul;
  • Lanțul de responsabilitate - sări peste unele cereri prin intermediul unui set de manipulare eveniment, până când cererea a fost procesată.

Design antipattern

Cred că este important să se cunoască nu numai o modalitate buna de a rezolva probleme, dar, de asemenea, erori în rezolvarea lor.

  • constante pentru interfață - folosind interfața Java pentru alte scopuri;
  • Vresennaya complexitate - adăugarea de entități care nu sunt necesare în ierarhia de clasă.

Se crede că necesitatea pentru unele dintre modelele cauzate de lipsa unui limbaj de programare specifică. Poate ca da, dar din moment ce folosim limbajul nu oferă un mod nativ pentru a rezolva problema, atunci de ce nu ia ideea că cineva a testat deja și este destul de eficient, dacă nu este optim.