Julkisivumalli (tai julkisivumalli) on ohjelmistojen suunnittelumalli, jota käytetään yleisesti olio-ohjelmoinnissa. Nimi tulee analogiasta arkkitehtoniseen julkisivuun.
Fasadi on objekti, joka tarjoaa yksinkertaistetun käyttöliittymän laajempaan koodikokonaisuuteen, kuten luokkakirjastoon. Julkisivu voi:
- saada ohjelmistokirjasto helpommin käytettäväksi, ymmärrettäväksi ja testattavaksi, koska julkisivussa on käteviä metodeja yleisimpiin tehtäviin;
- saada kirjasto luettavammaksi samasta syystä;
- vähentää ulkopuolisen ohjelmakoodin riippuvuutta kirjaston sisäisestä toiminnasta, koska suurin osa ohjelmakoodista käyttää julkisivua, mikä mahdollistaa suuremman joustavuuden järjestelmän kehitystyössä;
- käärikää huonosti suunniteltu sovellusrajapintakokoelma yhdeksi ainoaksi hyvin suunnitelluksi sovellusrajapintakoodiksi.
Facade-suunnittelumallia käytetään usein silloin, kun järjestelmä on hyvin monimutkainen tai vaikeasti ymmärrettävä, koska järjestelmässä on suuri määrä toisistaan riippuvaisia luokkia tai sen lähdekoodi ei ole saatavilla. Tämä malli piilottaa suuremman järjestelmän monimutkaisuuden ja tarjoaa asiakkaalle yksinkertaisemman käyttöliittymän. Se sisältää tyypillisesti yhden kotelointiluokan, joka sisältää joukon asiakkaan tarvitsemia jäseniä. Nämä jäsenet käyttävät järjestelmää julkisivuasiakkaan puolesta ja piilottavat toteutuksen yksityiskohdat.
Käyttö
Fasadia käytetään, kun halutaan helpompi tai yksinkertaisempi rajapinta taustalla olevaan kohteeseen. Vaihtoehtoisesti sovitinta voidaan käyttää, kun kotelon on kunnioitettava tiettyä rajapintaa ja sen on tuettava polymorfista käyttäytymistä. Koristeen avulla voidaan lisätä tai muuttaa rajapinnan käyttäytymistä ajon aikana.
Pattern | Intent |
---|---|
Adapteri | Muuntaa yhden rajapinnan toiseksi niin, että se vastaa sitä, mitä asiakas odottaa |
Decorator | Lisää dynaamisesti vastuuta rajapintaan käärimällä alkuperäisen koodin |
Facade | Tarjoaa yksinkertaistetun rajapinnan |
Facade-mallia käytetään tyypillisesti, kun:
- monimutkaiselle järjestelmälle tarvitaan yksinkertainen käyttöliittymä;
- osajärjestelmän abstraktiot ja toteutukset ovat tiukasti kytkettyjä;
- tarvitaan sisäänkäyntipiste jokaiselle kerroksellisen ohjelmiston tasolle; tai
- järjestelmä on hyvin monimutkainen tai vaikea ymmärtää.
Rakenne
Facade: Julkisivuluokka abstrahoi paketit 1, 2 ja 3 muusta sovelluksesta.Asiakkaat: Objektit käyttävät julkisivumallia päästäkseen käsiksi pakettien resursseihin.
Esimerkki
Tämä on abstrakti esimerkki siitä, miten asiakas (”sinä”) on vuorovaikutuksessa julkisivun (”tietokone”) kanssa monimutkaiseen järjestelmään (tietokoneen sisäiset osat, kuten prosessori ja kiintolevy).
/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();