Fasadmönstret (eller fasadmönstret) är ett designmönster för programvara som ofta används vid objektorienterad programmering. Namnet är en analogi med en arkitektonisk fasad.
En fasad är ett objekt som ger ett förenklat gränssnitt till en större kod, till exempel ett klassbibliotek. En fasad kan:
- göra ett programvarubibliotek lättare att använda, förstå och testa, eftersom fasaden har bekväma metoder för vanliga uppgifter;
- göra biblioteket mer lättläst, av samma anledning;
- minskat beroende av utomstående kod av ett biblioteks inre arbete, eftersom den mesta koden använder fasaden, vilket gör det möjligt att utveckla systemet på ett mer flexibelt sätt;
- lindra en dåligt konstruerad samling API:er i ett enda välkonstruerat API.
Designmönstret Facade används ofta när ett system är mycket komplext eller svårt att förstå eftersom systemet har ett stort antal av varandra beroende klasser eller dess källkod är otillgänglig. Det här mönstret döljer komplexiteten i det större systemet och ger klienten ett enklare gränssnitt. Det handlar vanligtvis om en enda omslagsklass som innehåller en uppsättning medlemmar som klienten behöver. Dessa medlemmar får tillgång till systemet för fasadklientens räkning och döljer implementeringsdetaljerna.
Användning
En fasad används när ett enklare eller enklare gränssnitt till ett underliggande objekt önskas. Alternativt kan en adapter användas när omslaget måste respektera ett visst gränssnitt och måste stödja polymorft beteende. En dekorator gör det möjligt att lägga till eller ändra beteendet hos ett gränssnitt vid körning.
Mönster | Intention |
---|---|
Adapter | Konverterar ett gränssnitt till ett annat så att det stämmer överens med vad klienten förväntar sig |
Dekorator | Lägger dynamiskt till ansvar till gränssnittet genom att omsluta den ursprungliga koden |
Facade | Gör ett förenklat gränssnitt |
Fasadmönstret används vanligtvis när:
- ett enkelt gränssnitt krävs för att få tillgång till ett komplext system;
- abstraktionerna och implementeringarna av ett delsystem är tätt sammankopplade;
- behöver en ingångspunkt till varje nivå av skiktad programvara; eller
- ett system är mycket komplext eller svårt att förstå.
Struktur
Facade: Det är en klass som abstraherar paket 1, 2 och 3 från resten av applikationen: Detta är ett abstrakt exempel på hur en klient (”du”) interagerar med en fasad (datorn) för att få tillgång till ett komplext system (interna datordelar, som CPU och hårddisk).
/* 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();