Intent
- Tarjoa yhtenäinen rajapinta joukolle osajärjestelmän rajapintoja.Facade määrittelee korkeamman tason rajapinnan, joka helpottaa osajärjestelmän käyttöä.
- Kääri monimutkainen osajärjestelmä yksinkertaisemmalla rajapinnalla.
Ongelma
Asiakassegmentti tarvitsee yksinkertaistetun käyttöliittymän monimutkaisen osajärjestelmän kokonaistoiminnallisuuteen.
Keskustelu
Facade käsittelee monimutkaisen osajärjestelmän kapselointia yhden käyttöliittymäobjektin sisään. Tämä vähentää oppimiskäyrää, joka tarvitaan osajärjestelmän menestyksekkääseen hyödyntämiseen. Se myös edistää osajärjestelmän irrottamista sen mahdollisesti monista asiakkaista. Toisaalta, jos Facade on osajärjestelmän ainoa yhteyspiste, se rajoittaa ominaisuuksia ja joustavuutta, joita ”tehokäyttäjät” saattavat tarvita.
Facade-objektin tulisi olla melko yksinkertainen puolestapuhuja tai helpottaja. Siitä ei saisi tulla kaikkitietävä oraakkeli tai ”jumala”-objekti.
Rakenne
Facade ottaa ”arvoituksen, joka on kääritty arvoitukseen, joka on kääritty mysteeriin”, ja lisää siihen kääreen, joka kesyttää ohjelmiston muodottoman ja käsittämättömän massan.
SubsystemOne
ja SubsystemThree
eivät ole vuorovaikutuksessa SubsystemTwo
:n sisäisten komponenttien kanssa.Ne käyttävät SubsystemTwoWrapper
”julkisivua” (eli korkeamman tason abstraktiota).
Esimerkki
Julkisivu määrittelee yhtenäisen, korkeamman tason rajapinnan osajärjestelmälle, joka helpottaa sen käyttöä. Kuluttajat kohtaavat Facaden tilatessaan luettelosta. Kuluttaja soittaa yhteen numeroon ja puhuu asiakaspalvelijan kanssa. Asiakaspalvelija toimii Facadeina, joka tarjoaa rajapinnan tilauksen täyttöosastolle, laskutusosastolle ja toimitusosastolle.
Tarkistuslista
- Tunnista yksinkertaisempi, yhtenäinen rajapinta osajärjestelmälle tai komponentille.
- Suunnittele ”kääre”-luokka, joka kapseloi osajärjestelmän.
- Fasadi/kääre kaappaa komponentin monimutkaisuuden ja yhteistoiminnallisuuden ja delegoi sopiviin metodeihin.
- Asiakas käyttää (on kytketty) vain fasadia.
- Harkitse, tuoko lisäfacade lisäarvoa.
Nyrkkisääntöjä
- Facade määrittelee uuden rajapinnan, kun taas Adapter käyttää vanhaa rajapintaa.Muista, että Adapter tekee kahdesta olemassa olevasta rajapinnasta toimivia yhdessä sen sijaan, että se määrittelisi täysin uuden rajapinnan. Mediator abstrahoi/keskittää mielivaltaisen viestinnän kollegojen objektien välillä. Se rutiininomaisesti ”lisää arvoa”, ja kollegaobjektit tuntevat sen/viittaavat siihen. Facade sen sijaan määrittelee yksinkertaisemman rajapinnan osajärjestelmään, se ei lisää uutta toiminnallisuutta, eivätkä osajärjestelmäluokat tunne sitä.
- Abstract Factorya voidaan käyttää vaihtoehtona Facadelle piilottaakseen alustakohtaisia luokkia.
- Facade-objektit ovat usein Singletoneja, koska tarvitaan vain yksi Facade-objekti.
- Adapteri ja Facade ovat molemmat kääreitä; mutta ne ovat erityyppisiä. Facaden tarkoituksena on tuottaa yksinkertaisempi käyttöliittymä, ja Adapterin tarkoituksena on suunnitella olemassa olevaan käyttöliittymään.Facade kietoo rutiininomaisesti useita objekteja ja Adapter kietoo yhden objektin; Facade voi olla yksittäisen monimutkaisen objektin front-end ja Adapter voi kietoa useita legacy-objekteja.
Kysymys: Ei! Muista, että Adapter-kuvio muuttaa yhden tai useamman luokan rajapinnan yhdeksi rajapinnaksi, jota asiakas odottaa. Vaikka useimmat oppikirjaesimerkit näyttävät sovittimen muokkaavan yhtä luokkaa, saatat joutua muokkaamaan monia luokkia tarjotaksesi rajapinnan, johon asiakas on koodattu. Samoin julkisivu voi tarjota yksinkertaistetun käyttöliittymän yhdelle luokalle, jolla on hyvin monimutkainen käyttöliittymä. Ero näiden kahden välillä ei ole siinä, kuinka monta luokkaa ne ”käärivät”, vaan niiden tarkoituksessa.
Tue ilmaista verkkosivustoamme ja omista eBook!
- 22 suunnittelumallia ja 8 periaatetta syvällisesti selitettynä
- 406 hyvin jäsenneltyä, helppolukuista ja jargonista vapaata sivua
- 228 selkeää ja hyödyllistä kuvitusta ja kaaviota
- Arkisto, jossa on koodiesimerkkejä neljällä kielellä
- Kaikki laitteet tuettuina: Kaikki laitteet: EPUB/MOBI/PDF-formaatit
Lue lisää…