160 likes | 296 Views
Creational design patterns Singleton. Miroslav Sajko. Modelová situácia. Pre niektoré triedy je dôležité, aby mali práve jednu inštanciu Mal by existovať 1 správca tlačiarní, 1 filesystem , 1 window manager , 1 „továreň“ na objekty, ... Vo všeobecnosti ide o rôzne managery
E N D
CreationaldesignpatternsSingleton Miroslav Sajko
Modelová situácia • Pre niektoré triedy je dôležité, aby mali práve jednu inštanciu • Mal by existovať 1 správca tlačiarní, 1 filesystem, 1 windowmanager, 1 „továreň“ na objekty, ... • Vo všeobecnosti ide o rôzne managery • Chceme mať k tejto inštancii jednoduchý prístup
Singleton • Zaisti triede jedinú inštanciu a poskytni globálny prístupový bod k nej • (Ensure a class only has one instance, and provide a global point of access toit)
Singleton v UML • Singleton • definuje statickú metódu pomocou ktorej sa pristupuje k unikátnej inštancii • môže (aj nemusí) byť zodpovedná za vytvorenie inštancie
Dôsledky • Výhody: • Kontrolovaný prístup k jedinej inštancii • Možnosťprepracovania vnútornej logiky pomocou dedenia • Možnosť zmeny počtu inštancií • Nevýhoda: • Pri viacvláknových aplikáciách môžu 2 vlákna vytvoriť 2 inštancie Singletonu
Implementácia • pomocou statickej metódy budú môcť klienti pristupovať k inštancii vytvorenej privátnym konštruktorom • Lazy instantiation (lenivá) – vytvorenie inštancie iba keď ešte neexistuje • Eagerinstantiation (horlivá) – okamžité vytvorenie inštancie • Riešenie BillaPugha • Enum
Subclassing • MazeFactory s oddedenými triedami EnchantedMazeFactory a AgentMazeFactory, pričom chceme iba jednu triedu – singleton • 1.) MazeFactory obsahuje statickú metódu instance(), ktorá rozhodne podľa parametra na vstupe, ktorú triedu bude inštancionalizovať (nevýhoda: public konštruktor) • 2.) obe triedy majú vlastné instance() metódy a tým pádom môžem použiť private konštruktor
Využitie v praxi • Loggers • Konfiguráčné nastavenia pre aplikáciu • Pristupovanie k zdieľaným zdrojom • Factoriesimplementované ako singletony
Zdroje • Design Patterns: Elements of Reusable Object-Oriented Software • http://en.wikipedia.org/wiki/Singleton_pattern • http://cs.wikipedia.org/wiki/Singleton • http://userpages.umbc.edu/~tarr/dp/lectures/Singleton-2pp.pdf
Ďakujem za pozornosťOtázky? Kontakt: miroslav.sajko@student.upjs.sk