140 likes | 253 Views
Behavioral design patterns State. Miroslav Sajko. Modelová situácia. Trieda TCPConnection reprezentujúca sieťové pripojenie Objekt má 3 stavy : nadviazan é , načúvajúce a uzavreté
E N D
BehavioraldesignpatternsState Miroslav Sajko
Modelová situácia • Trieda TCPConnection reprezentujúca sieťové pripojenie • Objekt má 3 stavy: nadviazané, načúvajúce a uzavreté • Reakcia na požiadavku závisí od jeho stavu (efekt požiadavky open je iný pri ukončenom a iný pri nadviazanom pripojení) • Kľúčové je zavedenie abstraktnej triedy TCPState, ktorá reprezentuje stav pripojenia
State • „objectforstates“ • Povoľ objektu meniť svoje správanie, keď sa zmení jeho interný stav. Objekt sa bude javiť akoby zmenil svoju triedu. • (Allow an object to alter its behavior when its internal state changes.The objectwill appear to change its class.)
State v UML • Context– definuje rozhranie záujmu pre klientov a udržiava tú inštanciu ConcreteState, ktorá zodpovedá aktuálnemu stavu • State – definuje rozhranie pre zapúzdrenie správania priradeného stavu Contextu • Triedy ConcreteStates – každá implementuje správanie konkrétneho stavu Contextu
Pozorovania • Contextdeleguje stavovo špecifické požiadavky pre aktuálny ConcreteState objekt • Context môže poslať sám seba ako argument stavovému objektu, aby v prípade nutnosti k nemu stavový objekt vedel pristupovať • Context je hlavné rozhranie pre klientov, klienti konfigurujú Context stavovými objektami, s ktorými už potom nekomunikujú priamo • Aj ContextajConcreteState triedy môžu rozhodovať o tom, ktorý stav nasleduje po ktorom a za akých podmienok
Dôsledky • Lokalizuje správanie špecifické pre jednotlivé stavy a oddeľuje ich od zvyšku logiky • Zmena stavu je explicitná – nemení sa veľa premenných, ale jedna –stavový objekt Contextu • Stav Contextu nikdy nebude inkonzistentný • Stavové objekty môžu byť aj zdieľané • Vyšší počet tried
Kedy použiť vzor State? • Správanie objektu silno závisí od jeho stavu • Musí meniť správanie za behu programu • Operácie majú zložité podmienkové výrazy • Stav je reprezentovaný niekoľkými vymenovanými konštantami a operácie obsahujú rovnakú podmienkovú štruktúru • Vzor State umožňuje každú vetvu podmienky dať do separátnej triedy, čo umožní narábanie so stavom ako s objektom
Implementácia • Kto definuje zmenu stavu? Context – ak kritériá na zmenu sú fixné ConcreteState – flexibilnejšie, ľahko upraviteľné, avšak vznikajú väzby medzi týmito triedami • Kedy vytvárať a zahadzovať stavové objekty? podľa potreby - ak nie je známe, či všetky stavy budú dosiahnuté počas behu a menia sa občas vytvorenie objektov vopred – ak sa stavy často menia a stavové objekty nesú veľa informácií
Využitie v praxi a súvisiace vzory • TCP protokol, POP protokol • Paint – Drawingtool/Selectiontool/... • Adobe Reader - Handtool/Selectiontool/Zoom • Banky – otvorené/zatvorené bankové konto • Flyweigth – zdieľanie stavov • Singleton – stavy sú často impl. ako singletony • Strategy – podobné riešenie, problém je iný
Zdroje • Design Patterns: Elements of Reusable Object-Oriented Software • http://java.dzone.com/articles/design-patterns-state
Ďakujem za pozornosťOtázky? Kontakt: miroslav.sajko@student.upjs.sk