Facade

Návrhový vzor Facade představuje řešení, jestliže je nutné zjednodušit vstupní bod do systému.

Při vývoji systému se lehce může stát, že celková jeho struktura se stává velmi těžce zvládnutelnou. I použitím návrhových vzorů se mnohdy dostáváme k velmi komplexnímu systému tříd s mnoha vazbami. Navíc každý systém může obsahovat i několik subsystému, které ještě zvětšují obtížnost pochopení zákonitostí systému. Facade představuje „high-level“ rozhraní, které slouží k zjednodušení komunikace mezi klientem a systémem.

Klient komunikuje se systémem pomocí Facade, kterému zasílá požadavky. Facade tyto požadavky zasílá příslušným objektům. Jinak řečeno Facade překládá svoje rozhraní do jednotlivých rozhraní v systému. Říkáme, že Facade je rozhraním systému, ale ve skutečnosti není použito standardní Java rozhraní (deklarované jako interface), ale Facade je implementován jako třída.

Příklad

Představme si systém, jehož úkolem je realizovat vyřízení zakázky ovoce, které objednávají maloobchody. V takovémto systému by neměla chybět třída respektive modul, která zajišťuje skladové hospodářství (Sklad ovoce), prodej ovoce (Obchod) a evidenci platby pohledávek (Účetnictví). Jelikož takové struktura je pro maloobchod nepřehledná, byla vytvořena třída Zásobování, která umožňuje průhlednou komunikaci s těmito moduly. Maloobchod si může zjistit stav svých dluhů, dotázat se na množství ovoce na skladě, zjistit jeho cenu a objednat si určité množství. Zásobování pouze překládá jeho požadavky na příslušné metody tříd v systému.