Lekce 6 - Facade (fasáda)
V minulé lekci, Adapter (wrapper), jsme si ukázali návrhový vzor Adapter (nebo také Wrapper).
V tutoriálu Návrhové vzory GoF si představíme návrhový vzor Facade (fasáda). Vzor se používá k vytvoření jednotného rozhraní pro celou logickou skupinu tříd, které se tak sdruží do subsystému.
Motivace
Mnohdy v naší aplikaci pracujeme s několika rozhraními různých tříd. To může být často nepřehledné, zejména pokud jsou rozhraní tříd složitá. Pokud spolu třídy logicky souvisí, můžeme je sdružit do subsystému pomocí fasády (Facade). Získáme tak jednotné rozhraní pro funkcionalitu, kterou nám subsystém poskytuje.
Vzor
Fasáda (Facade) je poměrně jednoduchý vzor, který se skládá z jedné třídy, která fasádu tvoří. Ta je napojena na další třídy, se kterými pracuje. Zvenku je však vidět jen fasáda (od toho název), a ta zastupuje rozhraní pro celý subsystém. Celá složitá struktura tříd je v pozadí:
Sníží se tím počet tříd, se kterými komunikujeme. Subsystém se lépe používá i testuje. Jedná se tedy opět o prostředníka. Máme zde také určitou podobnost se vzorem Adapter (Wrapper) . My ovšem obalujeme rovnou několik tříd do jednoho logického subsystému.
Příkladem by mohla být fasáda pro práci s PC na úrovni hardwaru. Sdružovala by třídu co umožňuje počítač uspat, restartovat nebo vypnout. Dále třídu co by upravovala jas monitoru a další, co by četla teploty procesoru a disku. Fasáda by zastřešila všechny metody do jednoho rozhraní. Mohla by obsahovat i jen vybrané metody pro náš účel.
Výhodou vzoru je také vyřešení závislostí jednotlivých komponent v subsystému. Pokud mezi nimi předáváme nějakou instanci, řeší se to uvnitř fasády.
V další lekci, Proxy (zástupce), si ukážeme návrhový vzor Proxy (nebo také zástupce), který se používá pro řízení přístupu uživatelů k objektu, popřípadě k rozšíření nebo k zefektivnění práce s tímto objektem.