CodeGym/Curs Java/Modulul 3/Modele structurale

Modele structurale

Disponibil

2.1 Adaptor

Adaptor (Adaptor) este un model de design structural conceput pentru a organiza utilizarea funcțiilor unui obiect care nu este disponibil pentru modificare printr-o interfață special creată.

Definiția oficială este puțin complicată, dar dacă o descrii cu propriile cuvinte, un adaptor este un model de design care permite obiectelor cu interfețe incompatibile să lucreze împreună .

model adaptor

Folosit pentru a organiza utilizarea funcțiilor unui obiect care nu este disponibil pentru modificare printr-o interfață special creată. Se creează o clasă suplimentară care are interfața necesară, iar această clasă apelează la rândul său metodele obiectului dorit (care nu are interfața necesară).

Important! Dacă în cod întâlniți sufixul Adaptor pentru o clasă, atunci aveți tot dreptul să considerați că această clasă acționează ca un adaptor și este asociată cu un grup de clase care funcționează conform schemei descrise mai sus.

Este utilizat în cazurile în care sistemul acceptă datele și comportamentul necesar, dar are o interfață necorespunzătoare. Cea mai frecventă utilizare a modelului Adaptor este atunci când doriți să creați o clasă care moștenește de la o clasă abstractă nouă sau existentă.

Puncte forte:

  • Trecerea la utilizarea altor clase externe nu necesită reluarea sistemului în sine, este suficient să implementați încă o clasă Adapter.
  • Independență față de implementarea claselor externe (clase din biblioteci al căror cod nu le putem schimba). Programul tău devine independent de interfața claselor externe.

2.2 Decoratori

Decorator este un model de design structural pentru atașarea dinamică a unui comportament suplimentar unui obiect. Modelul Decorator oferă o alternativă bună și flexibilă la practica subclasării pentru a extinde funcționalitatea.

Model de decorator

Folosit pentru a conecta dinamic obligații suplimentare la un obiect.

Mulți dintre voi vă vor întreba: cum puteți adăuga dinamic (în timp ce programul rulează) un comportament nou unui obiect? Un obiect poate fi asamblat din piese, adică din obiecte mici. Vă amintiți lanțurile de filtre din servlet-uri? Sau Stream API când ați scris o interogare folosind filter(), map(), list()?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

Puncte forte ale modelului Decorator:

  • Nu este nevoie să creați subclase pentru a extinde funcționalitatea unui obiect.
  • Abilitatea de a conecta dinamic noi funcționalități oriunde: înainte sau după funcționalitatea principală a obiectului ConcreteComponent.

2.3 Proxy

Proxy este un model de proiectare structurală care oferă un obiect care controlează accesul la un alt obiect, interceptând și trecând prin toate apelurile acestuia.

Adjunct (împuternicit)

Modelul Proxy oferă un obiect înlocuitor în locul obiectului real. Acest obiect controlează accesul la obiectul original. Folosit foarte des.

Vă amintiți cum am folosit cadrul Mockito și am interceptat un apel către un obiect real folosind metoda Mockito.spy() sau adnotarea @Spy? Atunci a fost creat un obiect Proxy special, prin care au trecut toate apelurile către obiectul original.

Și apoi am putea gestiona aceste apeluri adăugând reguli la obiect. Așa este - obiectul original nu se schimbă, iar lucrul cu el devine mult mai flexibil. Este util mai ales atunci când nu apelăm obiectul proxy din codul nostru, ci îl transmitem undeva. Controlând astfel comunicarea a două obiecte independente de noi.

Tipuri de proxy în funcție de scop:

  • Proxy de înregistrare : înregistrează toate apelurile către „Subiect” cu parametrii acestora.
  • Proxy la distanță (proxy-uri la distanță): asigură comunicarea cu „Subiectul”, care se află într-un spațiu de adrese diferit sau pe o mașină la distanță. De asemenea, poate fi responsabil pentru codificarea cererii și argumentele acesteia și trimiterea cererii codificate către „Subiectul” real.
  • Proxy virtual (proxy-uri virtuale): asigură că „Subiectul” real este creat numai atunci când este cu adevărat necesar. De asemenea, poate stoca în cache unele informații despre „Subiectul” real pentru a întârzia crearea acestuia.
  • Copiere la scriere : oferă o copie a „subiectului” atunci când clientul efectuează anumite acțiuni (un caz special al „proxy-ului virtual”).
  • Proxy de protecție : poate verifica dacă apelantul are permisiunile necesare pentru a face cererea.
  • Caching Proxy : Oferă stocare temporară a rezultatelor calculelor înainte de a le furniza mai multor clienți care pot partaja rezultatele.
  • Screening Proxy: Protejează „Subiectul” de clienții periculoși (sau invers).
  • Proxy de sincronizare : efectuează controlul accesului sincronizat la „Subiect” într-un mediu asincron cu mai multe fire.
  • Legătură „inteligentă” (proxy de referință inteligentă): efectuează acțiuni suplimentare atunci când este creată o legătură către „Subiect”, de exemplu, calculează numărul de linkuri active către „Subiect”.

2.4 Podul

Modelul Bridge este un model de design structural folosit pentru a „separa abstracția și implementarea, astfel încât acestea să se poată schimba independent”.

Modelul punte folosește încapsularea, agregarea și poate folosi moștenirea pentru a împărți responsabilitatea între clase.

Pod

Când abstracția și implementarea sunt separate, ele se pot schimba independent. Cu alte cuvinte, atunci când este implementată prin modelul de punte, modificarea structurii interfeței nu interferează cu schimbarea structurii implementării.

Considerați o astfel de abstractizare ca pe o figură. Există multe tipuri de forme, fiecare cu proprietățile și metodele sale. Cu toate acestea, există ceva care unește toate figurile. De exemplu, fiecare formă trebuie să fie capabilă să se deseneze singură, să se scaleze și așa mai departe.

În același timp, desenele grafice pot diferi în funcție de tipul de sistem de operare sau de biblioteca grafică. Formele ar trebui să fie capabile să se deseneze în diferite medii grafice. Dar este imposibil să implementați toate metodele de desen în fiecare formă sau să modificați forma de fiecare dată când metoda de desenare se schimbă.

În acest caz, modelul de punte ajută, permițându-vă să creați noi clase care vor implementa desenul în diverse medii grafice. Folosind această abordare, este foarte ușor să adăugați atât forme noi, cât și modalități de a le desena.

Legătura reprezentată de săgeată în diagrame poate avea 2 semnificații: a) „un fel”, în conformitate cu principiul substituției Liskov și b) una dintre posibilele implementări ale abstracției. Limbile folosesc de obicei moștenirea pentru a implementa atât a) cât și b), ceea ce tinde să umfle ierarhiile de clasă.

Puntea servește exact la rezolvarea acestei probleme: obiectele sunt create în perechi dintr-un obiect dintr-o clasă de ierarhie A și ierarhie B, moștenirea în cadrul ierarhiei A are sensul de „varietate” conform lui Liskov, iar pentru conceptul de „implementare”. de abstractizare” este folosită o legătură de la obiectul A la obiectul său pereche B.

2.5 Fațadă

Modelul de fațadă este un model de proiectare structurală care ascunde complexitatea unui sistem prin reducerea tuturor apelurilor externe posibile la un singur obiect care le delegă obiectelor adecvate din sistem.

Șablon de fațadă

Cum se oferă o interfață unificată cu un set de implementări sau interfețe disparate, de exemplu, unui subsistem, dacă cuplarea puternică la acel subsistem nu este de dorit sau implementarea subsistemului s-ar putea schimba?

Definiți un punct de interacțiune cu subsistemul - un obiect de fațadă care oferă o interfață comună cu subsistemul și atribuiți-i responsabilitatea de a interacționa cu componentele sale. O fațadă este un obiect extern care oferă un singur punct de intrare pentru serviciile subsistemului.

Implementarea altor componente ale subsistemului este privată și nu este vizibilă pentru componentele externe. Obiectul de fațadă oferă o implementare a modelului GRASP Rezistent la schimbări în ceea ce privește protecția împotriva modificărilor în implementarea subsistemului.

Important! Acest model este folosit atunci când dorim să ascundem complet un grup de obiecte și să transmitem toată comunicarea cu ele prin obiectul nostru. Dacă doriți doar să oferiți un anumit control asupra procesului de comunicare al obiectelor și nu neapărat să le ascundeți, atunci este mai bine să utilizați modelul Proxy.

1
Sarcină
Modulul 3,  nivellecţie
Blocat
Through the Nail with a Microscope
task4101
1
Sarcină
Modulul 3,  nivellecţie
Blocat
Signature Recipe
task4102
1
Sarcină
Modulul 3,  nivellecţie
Blocat
Surprise, Anonymous!
task4103
1
Sarcină
Modulul 3,  nivellecţie
Blocat
Fantastic Creatures
task4104
1
Sarcină
Modulul 3,  nivellecţie
Blocat
Alchemy Library
task4105
Comentarii
  • Popular
  • Nou
  • Vechi
Trebuie să fii conectat pentru a lăsa un comentariu
Această pagină nu are încă niciun comentariu