150 likes | 248 Views
Behavioral design patterns Command. Miroslav Sajko. Modelová situácia. V aplikáciách každé kliknutie na Button /Menu je požiadavkou na zmenu stavu Nie je možné požiadavky spracovať priamo v Button /Menu, lebo vždy záleží od kontextu
E N D
BehavioraldesignpatternsCommand Miroslav Sajko
Modelová situácia • V aplikáciách každé kliknutie na Button/Menu je požiadavkou na zmenu stavu • Nie je možné požiadavky spracovať priamo v Button/Menu, lebo vždy záleží od kontextu • Nedá sa predpokladať, čo a na ktorom objekte sa bude diať • Príklad: každý MenuItem je previazaný s konkrétnym Commandom, ktorý určuje čo a kde udeje
Command • Action, Transaction • Zapúzdripožiadavku ako objekt, aby bolo možné parametrizovať klientov s rôznymi požiadavkami, frontami alebo log požiadavkami a na podporu operácií, ktoré sa dajú vziať späť • (Encapsulate a request as an object, thereby letting you parameterizeclients withdifferent requests, queue or log requests, and supportundo-able operations)
Command v UML • Command– určuje rozhranie pre vykonanie operácie • ConcreteCommand – definuje prepojenie medzi akciou a objektom, na ktorom sa bude operácia vykonávať • Client – vytvorí požiadavku a určí Receiver objekt • Invoker – vyvoláva požiadavku, ktorú dáva Commandu • Receiver – vie ako vykonať operácie spojené s vykonávaním požiadavky
Dôsledky • Oddelenie objektu, ktorý vyvolá akciu (MenuItem) od objektu, ktorý vie ako ju vykoná • Jednoduché pridávanie nových Commandov, pretože netreba meniť už existujúce • Môžeme spájaťCommands do spojených Commands, príkladom sú makrá • Command je objekt, takže môžeme ho extendovať
Implementácia • Ako inteligentné majú byť Command objekty? • Hlúpe:delegujú akciu pre cieľový objekt • Chytré:implementujú sami všetko potrebné bez poverenia cieľového objektu • Podpora Undo/Redo • ConcreteCommand si okrem referencie na Receiver musí ukladať predchodzí stav, pri viacúrovňovom Undo aj širšiu históriu, pričom treba dávať pozor na akumulované chyby (zaistiť konzistentný stav objektov – Memento)
Využitie v praxi • MenuItems, Buttons a vo všeobecnosti všetky GUI objekty (actionPerformed() vo Swing-u) • Undo a Redo • Makrá • Wizardy • ThreadPooly – queue na požiadavky • Požiadavky posielané po sieti • Paralelné výpočty
Zdroje • Design Patterns: Elements of Reusable Object-Oriented Software • http://en.wikipedia.org/wiki/Command_pattern • http://userpages.umbc.edu/~tarr/dp/lectures/Command.pdf • http://objekty.vse.cz/Objekty/Vzory-Command
Ďakujem za pozornosťOtázky? Kontakt: miroslav.sajko@student.upjs.sk