Fasáda (návrhový vzor): Porovnání verzí

Smazaný obsah Přidaný obsah
wikifikovat
wikifikace
Řádek 1:
'''Fasáda''' (anglicky ''Facade'') je [[Návrhový vzor|softwarový návrhový vzor]], který slouží ke zjednodušení komunikace mezi uživatelem a systémem. Použití je výhodné, pokud je tento systém příliš komplexní (obsahuje mnoho tříd a vazeb) pro splnění dané oblasti úloh, jež po něm vyžadují uživatelé. Fasáda je způsob nahrazení velkého počtu rozhraní subsystémů, sjednoceným rozhraním, které bude zaštitovat všechna rozhraní subsystémů. Cílem je tedy omezit množství tříd, se kterými musí uživatel komunikovat. Často se využívá spolu s návrhovým vzorem [[Singleton|jedináček (Singleton)]]. Fasáda nemusí být realizována jako jediná třída, ale může být i skupinou tříd.<ref name=":1">{{Citace monografie|příjmení = Pecinovský|jméno = Rudolf|titul = Návrhové vzory:33 vzorových postupů pro objektové programování|vydání = 1|vydavatel = Computer Press|místo = |rok = 2007|počet stran = 528|strany = 255-260|isbn = 9788025115824}}</ref> <ref name=":0">{{Citace monografie|příjmení = Gamma|jméno = Erich|příjmení2 = Helm|jméno2 = Richard|titul = Návrh programů pomocí vzorů:Stavební kameny objektově orientovaných programů|vydání = 1|vydavatel = Grada|místo = |rok = 2003|počet stran = 388|strany = 185-193|isbn = 8024703025|jméno3 = Ralph|příjmení3 = Johnson|Jméno 4 = John|Příjmení 4 = Vlissides}}</ref>
{{Wikifikovat}}
'''Fasáda''' (anglicky ''Facade'') je [[Návrhový vzor|softwarový návrhový vzor]], který slouží ke zjednodušení komunikace mezi uživatelem a systémem. Použití je výhodné, pokud je tento systém příliš komplexní (obsahuje mnoho tříd a vazeb) pro splnění dané oblasti úloh, jež po něm vyžadují uživatelé. Fasáda je způsob nahrazení velkého počtu rozhraní subsystémů, sjednoceným rozhraním, které bude zaštitovat všechna rozhraní subsystémů. Cílem je tedy omezit množství tříd, se kterými musí uživatel komunikovat. Často se využívá spolu s návrhovým vzorem [[Singleton|jedináček (Singleton)]]. Fasáda nemusí být realizována jako jediná třída, ale může být i skupinou tříd.<ref name=":1">{{Citace monografie|příjmení = Pecinovský|jméno = Rudolf|titul = Návrhové vzory:33 vzorových postupů pro objektové programování|vydání = 1|vydavatel = Computer Press|místo = |rok = 2007|počet stran = 528|strany = 255-260|isbn = 9788025115824}}</ref> <ref name=":0">{{Citace monografie|příjmení = Gamma|jméno = Erich|příjmení2 = Helm|jméno2 = Richard|titul = Návrh programů pomocí vzorů:Stavební kameny objektově orientovaných programů|vydání = 1|vydavatel = Grada|místo = |rok = 2003|počet stran = 388|strany = 185-193|isbn = 8024703025|jméno3 = Ralph|příjmení3 = Johnson|Jméno 4 = John|Příjmení 4 = Vlissides}}</ref>
 
== Účel ==
[[File:Diagram of a complex system before Facade software design pattern.png|thumb|Obrázek č. 1 – Bez použití fasády]]
Při využívání komplexního systému pro relativně jednoduché úlohy je výhodné vytvořit vrstvu mezi samotným systémem a vlastními třídami, což má za následek zjednodušení používání tohoto systému a dále jeho „schování“ za fasádu. Vedlejším efektem fasády je poté možnost změnit systém, bez ohledu na uživatelovy třídy, které komunikují pouze s prostředníkem, tedy fasádou. Ukázka jednoduchého diagramu bez použití fasády je na obrázku č. 1 a s použitím na obrázku č. 2.[[File:Diagram of a complex system before Facade software design pattern.png|thumb|Obrázek č. 1 – Bez použití fasády.]][[File:Diagram of a complex system with Facade software design pattern.png|thumb|Obrázek č. 2 - S použití fasády.]]
[[File:Diagram of a complex system with Facade software design pattern.png|thumb|Obrázek č. 2 – S použitím fasády]]
Při využívání komplexního systému pro relativně jednoduché úlohy je výhodné vytvořit vrstvu mezi samotným systémem a vlastními třídami, což má za následek zjednodušení používání tohoto systému a dále jeho „schování“ za fasádu. Vedlejším efektem fasády je poté možnost změnit systém, bez ohledu na uživatelovy třídy, které komunikují pouze s prostředníkem, tedy fasádou. Ukázka jednoduchého diagramu bez použití fasády je na obrázku č. 1 a s použitím na obrázku č. 2.[[File:Diagram of a complex system before Facade software design pattern.png|thumb|Obrázek č. 1 – Bez použití fasády.]][[File:Diagram of a complex system with Facade software design pattern.png|thumb|Obrázek č. 2 - S použití fasády.]]
 
Účel fasády lze shrnout, jak píše Pecinovský: „''Účelem fasády je umožnit uživatelům s jednoduššími požadavky pracovat se složitým systémem, jako by byl jednoduchý.''“<ref name=":1" />:
 
„Účelem fasády je umožnit uživatelům s jednoduššími požadavky pracovat se složitým systémem, jako by byl jednoduchý.“
 
== Kdy použít ==
Ne vždy je vhodné tento návrhový vzor použít, a proto je uveden výčet typických situací, kdy by se použít měl.
* Chceme-li ke komplexnímu systému nabídnout zjednodušené rozhraní – Systém se skládá ze subsystémů, které se stávají složitějšími v průběhu vývoje. Často jsou tyto subsystémy rozděleny na mnoho tříd, dle principu jedné odpovědnosti (''Single responsibility''), tím však kromě snadně upravitelného a znovupoužitelného kódu vzniká mnoho vazeb a závislostí mezi třídami. Fasáda poté nabízí jednotný vstup pro běžné uživatele, nicméně pokud vyžadují uživatelé více, než jim fasáda nabídne, musí znát i prostředí za fasádou. <ref name=":0" />
* Chceme-li ke komplexnímu systému nabídnout zjednodušené rozhraní.
* Existuje-li příliš mnoho závislostí mezi uživatelem a implementačními třídami – Vložením prvku, který zprostředkovává komunikaci mezi vnitřním a vnějším systémem je vytvořena nezávislost mezi uživatelskými třídami a třídami systému. Kompletní nezávislost je pouze za předpokladu, že fasáda poskytuje dostatečnou funkcionalitu pro všechny své uživatele a není ji třeba obcházet. <ref name=":0" />
Systém se skládá ze subsystémů, které se stávají složitějšími v průběhu vývoje. Často jsou tyto subsystémy rozděleny na mnoho tříd, dle principu jedné odpovědnosti (Single responsibility), tím však kromě snadně upravitelného a znovupoužitelného kódu vzniká mnoho vazeb a závislostí mezi třídami. Fasáda poté nabízí jednotný vstup pro běžné uživatele, nicméně pokud vyžadují uživatelé více, než jim fasáda nabídne, musí znát i prostředí za fasádou. <ref name=":0" />
* Chceme-li systém uspořádat do vrstev – Pro každou vrstvu je vytvořena fasáda, která může být považována jako vstup do subsystému. Pokud jsou na sobě různé subsystémy závislé, lze snížit jejich závislost tím, že jednotlivé subsystémy budou pro komunikaci využívat pouze fasády ostatních subsystémů. <ref name=":0" />
* Existuje-li příliš mnoho závislostí mezi uživatelem a implementačními třídami.
Vložením prvku, který zprostředkovává komunikaci mezi vnitřním a vnějším systémem je vytvořena nezávislost mezi uživatelskými třídami a třídami systému. Kompletní nezávislost je pouze za předpokladu, že fasáda poskytuje dostatečnou funkcionalitu pro všechny své uživatele a není ji třeba obcházet. <ref name=":0" />
* Chceme-li systém uspořádat do vrstev.
Pro každou vrstvu je vytvořena fasáda, která může být považována jako vstup do subsystému. Pokud jsou na sobě různé subsystémy závislé, lze snížit jejich závislost tím, že jednotlivé subsystémy budou pro komunikaci využívat pouze fasády ostatních subsystémů. <ref name=":0" />
 
== Implementace ==
Řádek 27 ⟶ 23:
** Implementují konkrétní funkce
** Zodpovídají dotazy delegované fasádou <ref name=":0" />
 
=== Příklad implementace fasády v JAVA. ===
Příklad jak jednoduše vytvořit dialogové okno pomocí fasády JOptionPane v [[JAVA]]. To samé lze vytvořit také bez využití fasády a použitím přímo třídy subsystému, tou by byla v tomto případě JFrame.
<source lang=java>
...
Řádek 58 ⟶ 55:
Jak je vidět z ukázky, JOptionPane nabídne pro vytváření dialogu mnohem jednodušší rozhraní, než kdybychom ho měli vytvářet sami.
 
== LiteraturaReference ==
<references />
 
[[Kategorie:Návrhové vzory]]