Vzor fasády (nebo vzor fasády) je návrhový vzor softwaru, který se běžně používá při objektově orientovaném programování. Název vznikl analogicky k architektonické fasádě.
Fasáda je objekt, který poskytuje zjednodušené rozhraní k většímu souboru kódu, například ke knihovně tříd. Fasáda může:
- usnadnit používání, pochopení a testování softwarové knihovny, protože fasáda obsahuje pohodlné metody pro běžné úlohy;
- z téhož důvodu učinit knihovnu čitelnější;
- snížit závislost vnějšího kódu na vnitřním fungování knihovny, protože většina kódu používá fasádu, což umožňuje větší flexibilitu při vývoji systému;
- obalit špatně navrženou kolekci rozhraní API jedním dobře navrženým rozhraním API.
Vzor návrhu fasády se často používá, když je systém velmi složitý nebo obtížně pochopitelný, protože má velké množství vzájemně závislých tříd nebo není k dispozici jeho zdrojový kód. Tento vzor skrývá složitosti rozsáhlejšího systému a poskytuje klientovi jednodušší rozhraní. Obvykle zahrnuje jedinou obalovou třídu, která obsahuje sadu členů požadovaných klientem. Tyto členy přistupují k systému jménem klienta fasády a skrývají implementační detaily.
Použití
Fasáda se používá, když je požadováno snadnější nebo jednodušší rozhraní k základnímu objektu. Alternativně lze adaptér použít, když wrapper musí respektovat určité rozhraní a musí podporovat polymorfní chování. Dekorátor umožňuje přidat nebo změnit chování rozhraní za běhu.
Pattern | Intent |
---|---|
Adapter | Převede jedno rozhraní na jiné tak, aby odpovídalo tomu, co klient očekává |
Decorator | Dynamicky přidává odpovědnost k rozhraní tím, že obaluje původní kód |
Fasáda | Poskytuje zjednodušené rozhraní |
Vzor fasáda se obvykle používá, když:
- pro přístup ke složitému systému je vyžadováno jednoduché rozhraní;
- abstrakce a implementace subsystému jsou úzce provázány;
- potřebujete vstupní bod do každé úrovně vrstveného softwaru; nebo
- je systém velmi složitý nebo obtížně pochopitelný.
Struktura
Faktura: Třída facade abstrahuje balíčky 1, 2 a 3 od zbytku aplikace. klientů: Objekty používají vzor fasády pro přístup ke zdrojům z Balíčků.
Příklad
Toto je abstraktní příklad interakce klienta („vás“) s fasádou („počítačem“) na složitý systém (vnitřní části počítače, jako je CPU a HardDrive).
/* 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();
.