Facade Facade domc kino DVD pehrva Putn filmu

  • Slides: 16
Download presentation
Facade

Facade

Facade – domácí kino DVD přehrávač Puštění filmu: projektor zatáhnutí žaluzií zapnutí projektoru zapnutí

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

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

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

Facade Motivace Subsystém = množina tříd a dalších subsystémů Dekompozice zvětšuje subsystém Rozhraní subsystému

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ž

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

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í

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

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,

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

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 – 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

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

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á

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++