Intenție

  • Furnizează o interfață unificată pentru un set de interfețe dintr-un subsistem.Facade definește o interfață de nivel superior care face subsistemul mai ușor de utilizat.
  • Înfășoară un subsistem complicat cu o interfață mai simplă.

Problemă

Un segment al comunității de clienți are nevoie de o interfață simplificată pentru funcționalitatea generală a unui subsistem complex.

Discuție

Facade discută despre încapsularea unui subsistem complex într-un singur obiect de interfață. Acest lucru reduce curba de învățare necesară pentru a valorifica cu succes subsistemul. Aceasta promovează, de asemenea, decuplarea subsistemului de potențialii săi numeroși clienți. Pe de altă parte, dacăFacade este singurul punct de acces pentru subsistem, aceasta va limita caracteristicile și flexibilitatea de care „utilizatorii experimentați” ar putea avea nevoie.

Obiectul Facade ar trebui să fie un avocat sau un facilitator destul de simplu. Acesta nu ar trebui să devină un oracol atotștiutor sau un obiect „zeu”.

Structura

Facade ia o „ghicitoare învelită într-o enigmă învăluită în mister”,și interpune un înveliș care îmblânzește masa amorfă și insesizabilă de software.

SubsystemOne și SubsystemThree nuinteracționează cu componentele interne ale SubsystemTwo.Ele folosesc SubsystemTwoWrapper„fațada” (adică abstractizarea de nivel superior).

Exemplu

Fațada definește o interfață unificată, de nivel superior, pentru un subsistem care îl face mai ușor de utilizat. Consumatorii întâlnesc o fațadă atunci când comandă dintr-un catalog. Consumatorul sună la un număr de telefon și vorbește cu un reprezentant al serviciului clienți. Reprezentantul serviciului de relații cu cliențiiacționează ca o fațadă, oferind o interfață către departamentul de îndeplinire a comenzilor, departamentul de facturare și departamentul de expediere.

Listă de verificare

  1. Identificați o interfață mai simplă, unificată pentru subsistem sau componentă.
  2. Proiectați o clasă „învelitoare” care să încapsuleze subsistemul.
  3. Fațada/învelitoarea captează complexitatea și colaborările componentei și deleagă la metodele corespunzătoare.
  4. Clientul folosește (este cuplat la) doar fațada.
  5. Considerați dacă facadele suplimentare ar adăuga valoare.

Reguli generale

  • Facade definește o interfață nouă, în timp ce Adapter folosește o interfață veche.Rețineți că Adapter face ca două interfețe existente să funcționeze împreună, în loc să definească una complet nouă.
  • În timp ce Flyweight arată cum să faci o mulțime de obiecte mici, Facade arată cum să faci ca un singur obiect să reprezinte un întreg subsistem.
  • Mediator este similar cu Facade în sensul că abstractizează funcționalitatea unor clase existente. Mediator abstractizează/centralizează comunicațiile arbitrare între obiectele colegilor. Acesta „adaugă valoare” în mod curent și este cunoscut/referențiat de către obiectele colege. În schimb, Facade definește o interfață mai simplă pentru un subsistem, nu adaugă funcționalitate nouă și nu este cunoscută de clasele subsistemului.
  • Fabrica abstractă poate fi utilizată ca alternativă la Facade pentru a ascunde clasele specifice platformei.
  • Obiectele Facade sunt adesea Singletons deoarece este necesar un singur obiect Facade.
  • Adapter și Facade sunt ambele wrappers; dar sunt tipuri diferite de wrappers. Intenția Facadei este de a produce o interfață mai simplă, iar intenția Adaptorului este de a proiecta la o interfață existentă.În timp ce Facade înfășoară în mod obișnuit mai multe obiecte, iar Adaptorul înfășoară un singur obiect; Facade ar putea fi front-end-ul unui singur obiect complex, iar Adaptorul ar putea înfășura mai multe obiecte vechi.

Întrebare: Deci, modul în care se poate face diferența între modelul adaptor și modelul fațadă este că adaptorul înfășoară o singură clasă, iar fațada poate reprezenta mai multe clase?

Răspuns: Nu! Nu uitați că modelul Adapter schimbă interfața uneia sau mai multor clase într-o singură interfață pe care o așteaptă un client. Deși majoritatea exemplelor din manuale arată adaptoruladaptând o clasă, este posibil să fie nevoie să adaptați mai multe clase pentru a furniza interfața la care este codat un client. De asemenea, o fațadă poate oferi o interfață simplificată pentru o singură clasă cu o interfață foarte complexă. Diferența dintre cele două nu este în ceea ce privește numărul de clase pe care le „înfășoară”, ci în intenția lor.

Susțineți site-ul nostru gratuit și dețineți cartea electronică!

  • 22 modele de design și 8 principii explicate în profunzime
  • 406 pagini bine structurate, ușor de citit, fără jargon
  • 228 ilustrații și diagrame clare și utile
  • O arhivă cu exemple de cod în 4 limbi
  • Toate dispozitivele acceptate: Formate EPUB/MOBI/PDF

Aflați mai multe…

Lasă un răspuns

Adresa ta de email nu va fi publicată.