1 / 20

Flyweight

Flyweight. Autor: Milan Šafárik. Úvod. Tento vzor patrí do skupiny Structural Patterns . Jeho využitie je veľmi špecifické. Rieši problém, akým spôsobom zaistiť efektívnu správu veľkého množstva objektov, ktoré sa príliš neodlišujú. Motivácia.

aizza
Download Presentation

Flyweight

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Flyweight Autor: Milan Šafárik

  2. Úvod • Tento vzor patrí do skupiny StructuralPatterns. • Jeho využitie je veľmi špecifické. • Rieši problém, akým spôsobom zaistiť efektívnu správu veľkého množstva objektov, ktoré sa príliš neodlišujú.

  3. Motivácia • Pri niektorých aplikáciách môže byť výhodné využívať objekty na reprezentáciu všetkých aspektov danej aplikácie. Naivný prístup môže byť pamäťovo príliš nákladný. • Príkladom môže byť textový editor, ktorý využíva objekty na reprezentáciu vložených prvkov ako sú obrázky alebo tabuľky. Využitím objektov na reprezentáciu jednotlivých písmen by sa stala aplikácia flexibilnejšou. Obyčajne sa ale toto riešenie nezvykne nepoužívať.

  4. Motivácia Diagram znázorňujúci možné využitie objektov na reprezentáciu znakov.

  5. Motivácia Nevýhodou tohto dizajnu je jeho pamäťová náročnosť. Už stredne veľké dokumenty môžu potrebovať stovky tisíc objektov, ktoré spotrebujú veľké množstvo pamäte. Flyweight vzor popisuje, ako zdieľať objekty bez prílišných nákladov. Flyweight je zdieľaný objekt, ktorý môže byť použitý v mnohých kontextoch súčasne. Obsahuje dva typy stavov: vnútorný a vonkajší stav. Vnútorný stav je uložený v objekte. Pozostáva z informácii, ktoré sú nezávislé na Flyweight kontexte.

  6. Motivácia Vonkajší stav Flyweight neobsahuje, iba ho získava od klientskych objektov. Stavy Flyweight objektu textového editora: • Vnútorný stav: Charactercode • Vonkajší stav: Pozícia, Typograficky štýl. Každý výskyt rovnakého znaku v dokumente teda bude odkazovať na rovnakú inštanciu v zdieľanom úložisku Flyweight objektov.

  7. Konkrétny príklad

  8. Konkrétny príklad

  9. Uplatnenie Efektívnosť Flyweight vzoru silne závisí na tom, ako a kde je použitý. Využiť Flyweight sa odporúča, ak všetky tieto tvrdenia sú splnené: • Aplikácia využíva veľký počet objektov a skladovacie náklady sú vysoké. • Objekty sú náročné na úložný priestor. • Veľké množstvo informácii o objekte sa dá previesť do vonkajšieho stavu. • Nezáleží na identite objektu a zdieľanie je efektívne.

  10. Štruktúra

  11. Účastníci Flyweight • Deklaruje rozhranie, pomocou ktorého môžu Flyweight prijímať a reagovať na vonkajší stav. ConcreteFlyweight • Implementuje rozhranie Flyweight a pridáva úložisko pre vnútorný stav. ConcreteFlyweight musí byť zdielateľná, teda musí byť nezávislá na kontexte, v ktorom sa používa.

  12. Účastníci UnsharedConcreteFlyweight • Nie všetky Flyweight musia byť zdielateľné. Flyweight rozhranie umožňuje zdieľanie, ale nevynucuje ho. Zvyknú mať potomkov ConcreteFlyweight. FlyweightFactory • Vytvára a spravuje Flyweight objekty. • Zabezpečuje, aby boli Flyweight objekty zdieľané správne. Keď klient žiada Flyweight, Factory dodáva existujúcu inštanciu alebo vytvorí novú, ak neexistuje. Client • Uchováva referencie na Flyweight objekty. • Počíta alebo uchováva vonkajší stav týchto objektov.

  13. Štruktúra zdieľania Diagram znázorňujúci ako sú Flyweight zdieľané:

  14. Zhrnutie Stav, ktorý Flyweight potrebuje na fungovanie je delený na vnútorný a vonkajší. Vnútorný je uložený v ConcreteFlyweight objekte, vonkajší je počítaný alebo uložený v client objektoch. Tento stav odovzdáva Flyweight objektu vtedy, keď požaduje nejakú operáciu. Klienti nemajú prístup na vytvorenie Flyweight objektov. Môžu ich získať len z FlyweightFactory objektu, ktorý zabezpečuje správne zdieľanie.

  15. Následky • Nižšia prehľadnosť kódu. • Používa sa relatívne málo, lebo je vhodný len za špecifických podmienok. • Nižšie pamäťové nároky (čím viaczdieľaných flyweight objektov, tým viac ušetreného miesta) • Vyššie runtime náklady spojené s prevodom, hľadaním a počítaním vonkajšieho stavu.

  16. Príbuzné vzory • Flyweight sa často používa s Composite vzorom na reprezentáciu hierarchickej štruktúry grafu so zdieľanými listami. Dôsledkom zdieľania je, že listy nemôžu ukladať ukazovateľ na svojich rodičov. Namiesto toho, ukazovateľ mu je dodaný v rámci jeho vonkajšieho stavu. • FactoryMethod sa môže využiť pri vytváraní nových inštancií zdieľaných objektov.

  17. Ukážkový kód

  18. Ukážkový kód

  19. Ukážkový kód

  20. Ďakujem za pozornosť

More Related