Facade Facade domc kino DVD pehrva Putn filmu
- Slides: 16
Facade
Facade – domácí kino DVD přehrávač Puštění filmu: projektor zatáhnutí žaluzií zapnutí projektoru zapnutí DVD přehrávače zapnutí ozvučení Ukončení přehrávání: vypnout DVD přehrávač vypnout ozvučení vypnout projektor vytáhnout žaluzie HI-FI soustava
Facade – domácí kino Řešení: Univerzální ovladač s funkcemi: Přehrát film Ukončit film zatáhnout žaluzie zapnout projektor zapnout DVD přehrávač zapnout ozvučení vypnout DVD přehrávač vypnout ozvučení vypnout projektor vytáhnout žaluzie
Facade – domácí kino Všechny ostatní ovladače jsou stále k dispozici Univerzální ovladač je „navíc“ Lze např. pouze zatáhnout žaluzie ∪
Facade
Facade Motivace Subsystém = množina tříd a dalších subsystémů Dekompozice zvětšuje subsystém Rozhraní subsystému se stává složitým Použití Zjednodušené high-level rozhraní subsystému Redukce závislostí mezi klienty a subsystémem Vrstvení subsystémů Zabalení špatného rozhraní do lepšího Výhody Lepší čitelnost kódu Snížení závislosti na vnějším kódu Zjednodušení používání složitého systému
Facade – kompilátor Načtení tokenů, parsování tokenů, generování kódu, zápis do souboru… Co když chceme jenom „zkompilovat program“?
Facade – kompilátor Fasáda - Compiler Přijímá high-level požadavky Deleguje požadavky klienta mezi třídy subsystému
Facade – kompilátor Účastníci Subsystémy – Scanner, Parser, … Implementují logickou část kompilátoru Vykonávají příchozí požadavky od fasády O fasádě nevědí (transparentnost) Nejsou skryté (!)
Facade – kompilátor class Scanner { public: Scanner(istream&); virtual Token& Scan(); }; class Parser { public: virtual void Parse(Scanner&, Program. Node. Builder&); }; class Program. Node. Builder { public: virtual Program. Node* New. Variable(…); virtual Program. Node* New. Assignment(…); virtual Program. Node* New. Return. Statement(…); virtual Program. Node* New. Condition(…) const; Program. Node* Get. Root. Node(); };
Facade – kompilátor class Program. Node { public: virtual void Get. Source. Position(int& line, int& index); virtual void Add(Program. Node*); virtual void Remove(Program. Node*); virtual void Traverse(Code. Generator&); protected: Program. Node(); };
Facade – kompilátor class Code. Generator { public: virtual void Visit(Statement. Node*); virtual void Visit(Expression. Node*); protected: Code. Generator(Bytecode. Stream&); Bytecode. Stream& _output; };
Facade – kompilátor class Compiler { public: Compiler(); virtual void Compile(istream&, Bytecode. Stream&); }; // Facade void Compiler: : Compile ( istream& input, Bytecode. Stream& output ) { Scanner scanner(input); Program. Node. Builder builder; Parser parser; parser. Parse(scanner, builder); RISCCode. Generator generator(output); // potomek Code. Generator Program. Node* parse. Tree = builder. Get. Root. Node(); parse. Tree->Traverse(generator); }
Facade Typické chyby Fasáda vůbec nebyla zapotřebí Fasáda je stejně složitá jako subsystém Nic neskrývá Klienti jsou nuceni fasádu používat Subsystém je příliš jednoduchý Třídy subsystému jsou privátní (internal) Subsystém o fasádě ví Třídy subsystému si drží referenci na fasádu
Facade – související vzory Abstract Factory Fasáda může poskytovat rozhraní pro tvorbu objektů Singleton Fasáda jako Singleton - jen jeden vstupní bod do systému
Facade Reálné použití Java – JOption. Pane Modul <thread> standartní C++ knihovny Standard udává rozhraní, pro implementaci bývají použity různé knihovny Například knihovna pthread použitá kompilátory Clang a G++
- Putn
- Charakteristika postavy z filmu
- Gatunki filmowe przykłady
- Charakteristika filmové postavy
- Výpočet hdp
- Domc
- Kino helios kk
- Kino bay mexico
- Kino institute
- Jacomine nortier
- Film spartak
- Zenon wasilewski
- As the doctor approaches why is kino feeling rage
- The pearl chapter 6 comprehension questions
- Cle to tucson
- Kino jh
- Verabredung dialog