Intent
- Egy alrendszerben lévő interfészekhez egységes interfész biztosítása.A facade egy magasabb szintű interfészt definiál, amely megkönnyíti az alrendszer használatát.
- Egy bonyolult alrendszert egy egyszerűbb interfésszel csomagol.
Probléma
Az ügyfélközösség egy szegmensének egyszerűsített interfészre van szüksége egy összetett alrendszer teljes funkcionalitásához.
Discussion
A facade egy összetett alrendszer egyetlen interfészobjektumba való kapszulázását tárgyalja. Ez csökkenti az alrendszer sikeres kihasználásához szükséges tanulási görbét. Emellett elősegíti az alrendszer szétválasztását a potenciálisan sok ügyféltől. Másrészt, ha a Facade az egyetlen hozzáférési pont az alrendszerhez, az korlátozza azokat a funkciókat és rugalmasságot, amelyekre a “power usereknek” szükségük lehet.
A Facade objektumnak egy meglehetősen egyszerű támogatónak vagy segítőnek kell lennie. Nem szabad, hogy mindentudó orákulum vagy “isten” objektummá váljon.
Szerkezet
A Facade egy “rejtélybe burkolt rejtélyt rejtélybe burkolt rejtélyt” vesz, és egy olyan burkolatot vet be, amely megszelídíti a szoftver amorf és kifürkészhetetlen tömegét.
SubsystemOne
és SubsystemThree
nem lépnek kapcsolatba a SubsystemTwo
belső komponenseivel.Ők a SubsystemTwoWrapper
“homlokzatot” (azaz a magasabb szintű absztrakciót) használják.
Példa
A homlokzat egységes, magasabb szintű interfészt definiál egy alrendszerhez, ami megkönnyíti annak használatát. A fogyasztók akkor találkoznak a Facade-dal, amikor katalógusból rendelnek. A fogyasztó felhív egy számot, és beszél egy ügyfélszolgálati képviselővel. Az ügyfélszolgálati képviselő Facade-ként működik, és interfészt biztosít a rendelést teljesítő részleghez, a számlázási részleghez és a szállítási részleghez.
Check list
- Egy egyszerűbb, egységesített interfész meghatározása az alrendszer vagy komponens számára.
- Tervezzünk egy “burkoló” osztályt, amely kapszulázza az alrendszert.
- A homlokzat/burkolat megragadja a komponens komplexitását és együttműködéseit, és delegálja a megfelelő metódusokat.
- A kliens csak a homlokzatot használja (hozzá van kapcsolva).
- Megfontolandó, hogy további Facade-ek hozzáadott értéket jelentenek-e.
Összefüggő szabályok
- A Facade egy új interfészt definiál, míg az Adapter egy régi interfészt használ.Ne feledje, hogy az Adapter két meglévő interfészt hoz működésbe, szemben egy teljesen új interfész definiálásával.
- Míg a Flyweight azt mutatja meg, hogyan lehet sok kis objektumot létrehozni, a Facades azt mutatja meg, hogyan lehet egyetlen objektumot egy egész alrendszert reprezentálni.
- A Mediator abban hasonlít a Facade-hoz, hogy absztrahálja a meglévő osztályok funkcionalitását. A Mediator absztrahálja/centralizálja a kollégák objektumai közötti önkényes kommunikációt. Rutinszerűen “értéket ad”,és a kolléga objektumok ismerik/referálnak rá. Ezzel szemben a Facade egy egyszerűbb interfészt definiál egy alrendszerhez, nem ad hozzá új funkcionalitást, és az alrendszer osztályai nem ismerik.
- Abstract Factory a Facade alternatívájaként használható a platform-specifikus osztályok elrejtésére.
- A Facade objektumok gyakran Singletonok, mert csak egy Facade objektumra van szükség.
- Az adapter és a Facade is burkolat; de különböző típusú burkolatok. A Facade célja egy egyszerűbb interfész létrehozása, az Adapter célja pedig egy meglévő interfészhez való tervezés.Míg a Facade rutinszerűen több objektumot, az Adapter pedig egyetlen objektumot burkol; a Facade egyetlen összetett objektumot, az Adapter pedig több örökölt objektumot burkolhat.
Kérdés:
Válasz: Tehát az adapter és a homlokzatminta közötti különbség abban áll, hogy az adapter egy osztályt takar, a homlokzat pedig több osztályt is képviselhet?
Válasz: Az adapter egy osztályt takar, a homlokzat pedig több osztályt is? Nem! Ne feledje, az Adapter minta egy vagy több osztály interfészét egy interfésszé változtatja, amit az ügyfél elvár. Míg a legtöbb tankönyvi példában az adapter egy osztályt adaptál, előfordulhat, hogy több osztályt kell adaptálnia ahhoz, hogy az ügyfél által kódolt interfészt biztosítsa. Hasonlóképpen, a Facade egyszerűsített interfészt biztosíthat egy nagyon összetett interfésszel rendelkező egyetlen osztály számára. A kettő közötti különbség nem abban rejlik, hogy hány osztályt “csomagolnak”, hanem a szándékukban.
Támogassa ingyenes weboldalunkat és legyen Öné az e-book!
- 22 tervezési minta és 8 alapelv mélyreható magyarázata
- 406 jól strukturált, könnyen olvasható, szakzsargonmentes oldal
- 228 világos és hasznos illusztráció és diagram
- Egy archívum kódpéldákkal 4 nyelven
- Minden eszköz támogatott: EPUB/MOBI/PDF formátumokban
Tudjon meg többet…