Metodologija razvoja softvera Dizajnerski abloni Design Patterns Lekcija
Metodologija razvoja softvera Dizajnerski šabloni- Design Patterns Lekcija. 04 Šabloni ponašanja Prof. dr Branko Perišić, bperisic@singidunum. ac. rs
Šabloni ponašanja (Behavioral patterns) se bave: • dodelom odgovornosti objektima; • enkapsulacijom ponašanja u sklopu objekata; • delegiranjem zahteva objektima;
Šabloni ponašanja 1 Obuhvat Klasa Objekat NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor
Šabloni ponašanja - Potpuri • Lanac odgovornosti (Chain of responsibility), responsibility Komand (Command), Command Mediator (Mediator) Mediator i Posmatrač (Observer) Observer bave se problemom razdvanjanja “prijemnika (receiver)” i (receiver) “predajnika (sender)”, (sender) ali na potpuno različite načine: • • Lanac odgovornosti – prosleđuje zahtev pošiljaoca niz lanac potencijalnih opslužilaca (primalaca). Primalac mora prepoznati da li je zahtev njemu upućen! Komand – obično specificira vezu između pošiljaoca i primaoca u sklopu podklase; podklase Mediator – omogućava da pošiljalaoci i primaoci jedni druge indirektno referenciraju; referenciraju Posmatrač - definiše odvojen interfejs koji omogućava dinamičko konfigurisanje mnoštva prijemnika u fazi izvršavanja (run time);
Šabloni ponašanja - Potpuri • Lanac odgovornosti može koristiti Komandni šablon za predstavljanje zahteva u formi objekata • Lanac odgovornosti se obično primenjuje zajedno sa Kompozitnim šablonom. U tom slučaju se roditeljski objekat može ponašati kao potomak.
Šabloni ponašanja - Potpuri • Komand i Memento se ponašaju kao “žetoni” koji se razmenjuju i, po potrebi, naknadno koriste. – Kod Komandnog šablona – žeton je zahtev; zahtev – Kod Memento šablona – žeton je unutrašnje stanje nekog objekta u određenom trenutku vremena; • Polimorfizam je značajan za Komandni šablon dok kod Memento šablona nije bitan, budući da je Memento moguće proslediti jedino kao VREDNOST (value);
Šabloni ponašanja - Potpuri • • • Komand može koristiti Memento u cilju evidentiranja situacije (stanja) koje je neophodno restaurirati ako se pokrene UNDO operacija. Makro. Komande je moguće implementirati uz oslonac na Komandni i Kompozitni obrazac. Komanda koju je potrebno kopirati pre smeštanja u arhivu (istoriju) se ponaša kao Prototip
Šabloni ponašanja - Potpuri • • • Interpreter može koristiti State za definicuju konteksta u kome se odvija proces parsiranja. Stablo apstraktne sintakse Interpretera je u suštini Kompozitni obrazac (outuda je opravdano koristiti Iterator i/ili Visitor); Visitor Simboli koji predstavljaju terminatore u sklopu apstraktne sintakse Interpretera mogu biti implementirani kroz mehanizam deljenje podržan Muva (Flyweight) obrascem.
Šabloni ponašanja - Potpuri • • Iterator može da prolezi kroz Kompozitnu strukturu Visitor može da obezbedi primenu neke operacije nad Kompozitnom strukturom; Polimorfni Iteratori se oslanjaju na Factory Method u cilju instanciranja odgovarajuće podklase Iteratora;
Šabloni ponašanja - Potpuri • • Mediator i Observer predstavljaju obrasce koji su “konkurenti”. Razlika između njih je u tome što Observer raspoređuje (distribuira) komunikaciju uvođenjem objakta “posmatrača” i “posmatranog” objekta, dok Mediator enkapsulira komunikaciju između njih. Observere je jednostavnije ponovno koristiti! Sa druge strane Mediator može jednostavnije parametrizirati Observer u cilju dinamičkog podešavanja karakteristika registrovanih objekata.
Šabloni ponašanja - Potpuri • • Mediator je sličan Fasadi u smislu da apstrahira funkcionalnost postojećih klasa. Mediator apstrahira/centralizuje proizvoljnu komunikaciju između objekata koji sarađuju – rutinskim dodavanjem vrednosti koju prepoznaje/referencira drugi objekat (višesmerni protokol). Nasuprot tome Fasada definiše jednostavni interfejs podsistema, ne dodaje novu funkcionalnost, i klase unutar podsistema nemaju svest o njemu. (jednosmerni protokol – zahtevi pristižu klasama podsistema, klase podsistema ne mogu slati zahteve);
Šabloni ponašanja - Potpuri • • Memento se često koristi zajedno sa Iteratorom. Iterator može koristiti Memento u cilju čuvanja konteksta (stanja) pojedinačnih iteracija. Iterator interno skladišti Memento. State je sličan Startegiji ako se izuzme namena. Muva objašnjava gde i kako je moguće deliti State objekte. State objekti su obično Unikati (Singletone).
Šabloni ponašanja - Potpuri • Strategija – omogućava promenu prirode objekata. Dekorater – omogućava promenu spoljašnje pojave objekta. • Strategija je vezana za algoritam slično kao što je Graditelj vezan za izgradnju objekata. • Strategija je slična Template metodu, osim u nivou granulacije: • • • Template method koristi nasleđivanje u cilju podrške različitim delovima algoritam; Strategy koristi delegiranje u cilju variranje celokupnog algoritma; Visitor deluje kao “moćniji” Command šablon jer je u stanju inicirati sve što je neophodno/odgovarajuće za objekat na koji se odnosi;
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Chain of Interpreter -Adapter Problem koji rešava: rešava Responsibility Builder Bridge Command Za dati jezik definiše Composite predstavljanje njegove gramatike i Prototype Iterator omogućava tumačenje (interpretaciju)Mediator iskaza tog jezika. Singleton Decorator Facade Memento na “jezik”, Ako je domen problema moguće preslikati rešiti korišćenjem Objekat tada se on može jednostavno Flyweight Observer interpretera. Proxy State Preslikavanje domena na jezik, jezika na gramatiku i Strategy gramatike na hijerarhijski objektno orijentisani dizajn. Visitor
Interpreter - Struktura
Interpretator - Model Gradi ili prihvata stablo apstraktne sintakse koje predstavlja određeni iskaz na jeziku koji je opisan gramatikom interpretera. Stablo apstraktne sintakse predstavlja rekurzivno kompozitnu strukturu sačinjenu od tarminalnih simbola i složenih izraza.
Interpretator - Model Predstavlja okvir rada i sadrži podatke koji su globalni sa aspekta interpretera.
Interpretator - Model Apstraktni Izraz: - Deklariše Izraz apstraktnu operaciju Interpretiraj, koja je zajednička za sve čvorove stabla apstraktne sintakse.
Interpretator - Model Terminator: Terminator - Implementira operaciju Interpretiraj za poseban slučaj obrade završnog simbola – terminatora definisanog u sklopu gramatike jezika;
Interpretator - Model Složeni iskaz: iskaz - Za svako pravilo gramatike neophodna je po jedna klasa. Definiše operaciju Interpretiraj za svako gramatičko pravilo, odnosno podizraz i predstavlja osnovni slučaj rekurzivnog postupka i koristi Context za čuvanje i pristup stanju interpretera.
Interpreter - Posledice • • Gramatika se relativno lako menja i poštuje! Deo modela koji implementira gramatička pravila koristi nasleđivanje kao mehanizam za proširivanje gramatičkih pravila. I-gramatika se jednostavno implementira! Klase koje definišu čvorove stabla su jednostavne za implementaciju i pogodne su za automatsko generisanje koda. Problem unose složene gramatike jer se relativno teško održavaju. -Potrebno je pisati klasu za svako pravilo. Proširivanje mehanizama interpretiranja izraza podrazumeva, u složenim situacijama, veliki broj metoda klasa koje opisuju gramatička pravila.
Interpreter - Implementacija • Način implementacije stabla apstraktne sintakse – Primer: tabele odlučivanja? • Definisanje operacije Interpretiraj()! – Ako se pojavljuje veliki broj operacija moguće je umesto njihovog definisanja u sklopu klasa koje su zadužene za opis gramatičkih pravila, iskoristiti Visitor šablon i u njega smestiti operacije interpretacija. • Tretirati završne simbole u slučaju složenih sintaksi uvođenjem Muva šablona, čime se pozicije završnih simbola čuvaju u nadklasi dok se informacije potrebne za interpretaciju prosleđuju uz oslonac na Context. (Tipičan primer predstavljaju gramatike programskih jezika. )
Interpreter: – Srodni šabloni: • Composite (Sastav) – Stablo apstraktne sintakse! • Flyweight (Muva) – opis završnih simbola. • Itarator – podrška obilasku strukture • Visitor (Posetilac) – podrška održavanju ponašanja u svakom čvoru stabla apstraktne sintakse.
Interpreter – Primer 1 Interpretira rečenice nekog teksta pisanog na jeziku čija je gramatika poznata.
Interpretator – Primer 1.
Interpreter - Softverski primer Kod Gtalk/Yahoo messenger-a : -) se interpretira kao : -( se interpretira kao
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Bridge Lanac. Builder odgovornosti - Problem. Command koji rešava: rešava Prototype Composite Iterator Razdvajanje Pošiljaoca i Decorator Primaoca zahteva i. Mediator slabljenje njihovih Singleton međuzavisnosti. Facade Memento Omogučava strukturiranje obrade objekata u formi “sabirnice” Objekat preko koje pošiljalac Flyweight komunicira sa svim. Observer potencijalnim primaocima! State interfejs, Svaki potencijalni primaoc Proxy implementira identičan interfejs mora biti u stanju da prepozna da li je on. Strategy taj koji treba da obradi poruku, poruku i ako nije da prosledi poruku sledećem u lancu! lancu Visitor
Lanac odgovornosti - Struktura Inicira zahtev koji se prosleđuje niz lanac.
Lanac odgovornosti - Struktura Definiše interfejs za obradu zahteva. Opciono – Implementira vezu do sledećeg suseda u nizu – sledbenik!
Lanac odgovornosti - Struktura Obrađuju zahteve koji su u njegovoj nadležnosti! Podržavaju mehanizam pristupa neposrednom sledbeniku! Zahtev, koji nije u njihovoj nadležnosti, prosleđuju niz lanac – neposrednom sledbeniku!
Lanac odgovornosti - Posledice • Prednosti: – – • Smanjenje nivoa vezivanja – Objekat nije svestan šta drugi objekti u lancu rade niti poznaje strukturu lanca odgovornosti. Primalac i pošiljalac nemaju svest jedan o drugom. Na taj način umesto da svaki objekat održava reference na sve moguće primaoce on održava jednu referencu na sledećeg neposrednog sledbenika u lancu. Fleksibilnost u dodeli odgovornosti – Promenom konfiguracije lanca moguća je promena načina obrade (dinamički). Mana: – Ne postoji garancija da će zahtev biti obrađen. (Uzroci: nekorektna konfiguracija lanca ili nepostojanje opslužioca);
Lanac odgovornosti - Implementacija • Implementacija lanca: – • • • Definisanjem nove veze – (u sklopu apstraktnog ili konkretnog rukovaoca) – Upotrebom postojeće veze (ako postoji u sklopu implementacije nekog drugog segmanta šablona) Povezivanje sledbenika: - Ako ne postoje veze koje se mogu iskoristiti za formiranje lanca neophodno ih je dodati. U tom slučaju apstraktni rukovalac, pored interfejsa mora obezbediti i podršku mehanizmu povezivanja. Predstavljanje zahteva – (fiksno kodiranje, komande i sl. ) Prosleđivanje zahteva – (posebna metoda ili mehanizam prepoznavanja da li je zahtev upućen posmatranom objektu)
Lanac odgovornosti: – Srodni šabloni: • Composite (Sastav) prosleđivanja sledbeniku; • – podrška
Lanac odgovornosti – Nesoftverski primer Ulančava primljene objekte i prosleđuje ih niz lanac dok ga neki prijemnik ne obradi.
Lanac odgovornosti – Softverski primer Troslojna arhitektura Internet Login stranica Provera lozinke Stanje računa
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Komand Problem koji rešava: rešava Singleton Decorator Mediator Ako je potrebno da se objektima zahtev a da se pri Facade prosledi. Memento tome ništa ne zna o operaciji kojom se taj zahtev realizuje niti o Objekat Flyweightkomande/akcije/transakcije. Observer objektu koji je nadležan za izvršavanje To se postiže pretvaranjem zahteva u objekat Proxy Statekoji se onda može čuvati i prosleđivati kao i bilo koji drugi. Strategy Alternativni nazivi: AKCIJA, TRANSAKCIJA; Visitor
Komanda - Motivacija
Komanda - Struktura Kreira objekat Konkretna. Komanda i određuje primaoca.
Komanda - Struktura Aktivator: • čuva objekat Konkretna. Komanda • zahteva izvršenje komande povezivanjem sa operacijom execute() za tu komandu. Ako je potrebno podržati Undo operaciju Komkretna komanda mora sačuvati stanje pre izvršenja.
Komanda - Struktura Komanda: Deklariše interfejs za izvršavanje operacije.
Komanda - Struktura Primalac: Zna kako da izvrši operaciju kojom se ispunjava zahtev. Svaka klasa može da bude primalac.
Komanda - Struktura Konkretna. Komanda: 1. Definiše povezivanje između objekta klase Primalac i neke akcije/komande. 2. Implementira operaciju Execute()
Komanda – Redosled aktivnosti
Komanda - Posledice • • Razdvaja objekat koji aktivira operaciju od objekta koji zna kako da je izvrši; Komande su objekti prvog reda – Njima se može manipulisati i mogu se proširivati kao i ostali objekti; Moguće je formirati skup komandi njihovim udruživanjem u složenu komandu (makro komande), uz oslonac na Composite šablon; Nove komande se lako dodaju jer ne menjaju strukturu postojećih;
Komanda - Implementacija • Prilikom implementacije Komand šablona neophodno je dati odgovore na sledeća pitanja: 1. Kakav je nivo sofisticiranosti komande – direktno povezivanje komande i primaoca ili sposobnost komande da dinamički odredi primaoca; 2. Da li postoji potreba za Undo/Redo podrškom; 3. Kako izbeći akumuliranja grešaka u slučaju Undo/Redo akcija (Potreban i dovoljan kontekst koji je neophodno sačuvati u cilju poništavanja ili ponavljanja komande? )
Komanda: – Srodni šabloni: • Composite (Sastav) – za podršku složenim komandama; • Memento – (Podsetnik) – za podršku čuvanju konteksta pre izvršenja; • Prototip – ako je neophodno kopirati komandu pre nego što se ona smesti u listu istorije ponašanja;
Composite-Command
Komanda – Primer 1
Komanda – Primer 2
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Iterator - Problem koji rešava: rešava Facade Memento Sekvencijalni Objekat pristup Flyweight objektima u sklopu definisane Observer strukture (objekat agregat) bez eksponiranja unutrašnje Proxy reprezentacije objekata kojima se State pristupa. Strategy Alternativni naziv: Kursor Visitor
Iterator - Struktura Formuliše zahtev specificiranjem Agregata i Iteratora.
Iterator - Struktura Definiše interfejs za pristupanje i obilaženje elemenata
Iterator - Struktura Implementira Iterator; interfejs Prati tekuću poziciju prilikom iteriranja.
Iterator - Struktura Definiše interfejs za kreiranje objekta Iterator.
Iterator - Struktura Implementira interfejs za kreiranje Iteratora tako da vraća primerak konkretnog iteratora.
Iterator - Posledice • • • Omogućava podršku različitim načinima iteriranja – potencijalno rešenje primenom mehanizma nasleđivanja; Pojednostavljuje interfejs Agregata – Pozicioniranjem interfejsa za podršku iteriranju u Iterator otklanja potrebu za sličnim interfejsom u sklopu Agregata; Omogućava pokretanje više paralelnih obilazaka agregata – Kako Iterator prati svoje stanje moguće je konkurentno postojanje više objekata Iterator koji realizuju različite iteracije.
Iterator - Implementacija Prilikom implementacije Iteratora otvara se niz mogućnosti i pitanja: 1. Ko kontroliše iteraciju? – Ključno pitanje na koje implementacija daje konkretan odgovor. Moguće varijante obuhvataju: – – 2. 3. 4. 5. Kontrolu od strane Iteratora – UNUTRAŠNJI ITERATOR; Kontrolu od strane Klijenta – SPOLJAŠNJI ITERATOR; Ko definiše algoritam obilaženja? – Algoritam obilaženja je moguće definisati i van Iteratora. Ako npr. Agregat definiše algoritam tada se Iterator koristi jedino za čuvanje stanja iteracije. (KURSOR). Smeštanje definicije algoritma u Iterator omogućava transparentno proširivanje različitim implementacijama ili algoritmima ali, u slučaju da algoritam zahteva pristup privatnim promenljivim agregata pozicioniranje algoritma u Iterator može narušiti enkapsulaciju agregat-objekta. Do koje mere je iterator “izdržljiv”? – Menjanje sadržaja agregata u toku procesa iteracije može uneti velike probleme. Ako se elementi dodaju ili uklanjaju može se desiti da se nekom elementu pristupi više puta dok neki elementi mogu biti izostavljeni iz tekuće iteracije! Robustan iterator mora obezbediti dodavanje, izmenu i brisanje elemenata agregata bez uticaja na tekuću iteraciju a da pri tome ne FORMIRA KOPIJU AGREGATA. Dodatne operacije iteratora. – Interfejs iteratora minimalno podržavati operacije Navigacije (Prvi, Sledeći, Tekući, Kraj). Korisno je razmotriti potrebu za dodavanje novih operacija (Prethodni, Go. To, Skip i sl. ) Potreba za postojanje Null. Iterator-a – Izuzetno je koristan kod rekurzivnog obilaska strukture tipa stablo. Čvorovi vračaju konkretan iterator dok listovi treba da vrate Null. Iterator (iteracija završena).
Iterator: – Srodni šabloni: • Composite (Sastav) – za podršku rekurzivnom prolasku kroz kompozitne strukture; • Factory Method – metod) – za podršku (Proizvodni instanciranju odgovarajuće podklase iteratora u slučaju polimorfnog iteratora. • Memento (Podsetnik) – za podršku čuvanja stanja iteracije!
Iterator - Primer 1. . List list = new List(); . . . List. Iterator iterator = new List. Iterator(list); iterator. First(); while (!iterator. Is. Done()) { Object item = iterator. Current. Item(); // Code here to process item. iterator. Next(); }. . .
Iterator - Primer 2. Polimorfni iterator
Iterator - Primer 3. radni okvir JAVA kolekcija
Iterator (nesoftverski primer) Obezbeđuje mehanizam za sekvencijalni pristup elementima neke strukture.
Iterator (softverski primer)
Šabloni ponašanja-Detalji Mediator (Posrednik)NAMENA - Problem koji rešava: rešava Obuhvat Kreacioni Klasa Strukturalni Šabloni ponašanja Enkapsulacija saradnje objekata! Factory Method Adapter Interpreter OO projektovanje favorizuje distribuciju ponašanja među Abstract Factory Adapter Chain of objektima. To često dovodi do toga da pojedinačni Responsibilityobjekti poseduju veze. Builder sa velikom brojem Bridge drugih objekata, Command čime se oni JAKO SPREŽU! SPREŽU Prototype Composite Iterator Singleton Objekat Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor
Mediator - Motivacija
Mediator - Struktura
Mediator - Struktura Posrednik – Definiše interfejs za komunikaciju sa objektima Kolegama (Saradnicima).
Mediator - Struktura Saradnik – Definiše hijerarhiju objekata saradnika koji koriste Posrednik za komunikaciju.
Mediator - Struktura Konkretan. Posrednik 1. Implementira koordiniranjem Saradnika; saradnju objekata 2. Ima svest o objektima Saradnicima i održava podatke o njima.
Mediator - Struktura Konkretan. Saradnik 1. Ima svest jedino o objektu Posrednik; 2. Svaki saradnik komunicira sa posrednikom kad god ima potrebu da komunicira sa drugim objektima Saradnicima.
Mediator - Saradnja
Mediator - Posledice • Ograničavanje kreiranja podklasa – Posrednik lokalizuje ponašanje koje bi inače bilo distribuirano na više objekata. Izmena tog ponašanja zahteva jedino pravljenje klase Posrednik. Saradnici se pri tome ne menjaju! • Snižava međuzavisnost objekata Saradnika – Saradnici su međusobno slabo povezani te se mogu nezavisno menjati; • Pojednostavljivanje protokola – Interakciju više prema više Posrednik zamenjuje interakcijom JEDAN prema VIŠE. • Apstrahiranje načina saradnje objekata – Pojedinačno ponašanje objekata ne utiće na njihovu saradnju budući da je ona enkapsulirana u sklopu objekta Posrednik. Centralizacija kontrola – Složenost iz interakcije seli u Posrednika! Kako on enkapsulira protokole njegova složenost može značajno porasti čime nastaje problem održavanja i izmene njegovog ponašanja! •
Mediator - Implementacija Prilikom implementacije Mediatora otvaraju se sledeća pitanja: 1. 2. Da li je moguće izostaviti apstraktnu klasu Posrednik? – Ako saradnici rade samo sa jednom klasom Posrednik (Konkretan. Posrednik) moguće je pojednostaviti model eliminacijom apstraktne klase Posrednik! U slučaju da postoji više posrednika apstraktna klasa Posrednik omogućaja jedinstvenu deklaraciju zajedničkog ponašanja koje Konkretni. Posrednici redefinišu mehanizmom nasleđivanja. Komunikacija između Saradnika i Posrednika – Jedan od mogućih načina implementacije Posrednika je primena Observer šablona. Drugi pristup podrazumeva definisanje specijalizovanih interfejsa za obaveštavanje.
Mediator: – Srodni šabloni: • Fasada (Sastav) – razlika je u načinu na koji se posmatraju objekti Saradnici. Fasada apstrahuje podsistem objekata radi pružanja jedinstvenog interfejsa i time implementira JEDNOSMERNI PROTOKOL. Objekat Fasada upućuje zahteve klasama podsistema. • Observer – (Posmatrač) – za podršku evidentiranju potrebe za posredovanjem.
Mediator - Broker
Mediator - Broker
Mediator (nesoftverski primer) Slabljenje zavisnosti među objektima se postiže prenosom odgovornosti za komunikaciju na Posrednika
Mediator (softverski primer) Gtalk Server
Šabloni ponašanja-Detalji Obuhvat NAMENA Memento koji Šabloni rešava: rešava Kreacioni - Problem Strukturalni ponašanja Factory Method Adapter Interpreter Ako Klasa je neophodno, bez narušavanja enkapsulacije, preuzeti i Abstract Factory Adapter Chain of manifestovati ponašanje objekta sa ciljem restauracije Responsibility njegovog stanja. Builder Bridge Command Implementacija kontrolnih tačaka i mehanizama za Prototype Composite Iterator poništavanje dejstava neke akcije do posmatranog trenutka! Singleton Objekat Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor
Memento - Struktura Izvor (Originator) 1. Kreira Podsetnik (Memento) koji sadrži snimak njegovog trenutnog unutrađnjeg stanja; 2. Koristi Podsetnik za restauraciju unutrašnjeg stanja;
Memento - Struktura Podsetnik (Memento) 1. Čuva unutrašnje stanje objekta Izvor (Originator). Predmet čuvanja definiše Izvor; 2. Dozvoljava pristup jedino objektu Izvor. Podsetnik poseduje dva interfejsa – uski preko koga se Podsetnik predaje drugim objektima (Strana Staratelja – Caretaker) i široki – pristup svim potrebnim podacima radi restauriranja stanja;
Memento - Struktura Staratelj (Caretaker) 1. Odgovoran je za čuvanje Podsetnika; 2. Nikada ne radi ništa sa sadržajem podsetnika niti taj sadržaj na bilo koji način analizira;
Memento – Dijagram sekvence
Memento - Primer
Memento (nesoftverski primer) Izvozi stanje objekta u cilju njegove kasnije restauracije po potrebi.
Memento (nesoftverski primer) Izvozi stanje objekta u cilju njegove kasnije restauracije po potrebi.
Memento (softverski primer)
Memento (Primer)
Memento (Primer - Kalkulator)
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Observer - Problem koji rešava: rešava Objekat Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor
Posmatrač
Observer - Nesoftverski primer Kada neki objekat promeni stanje svi zavisni objekti se o tome obaveštavaju.
Observer – Softverski primer Internet Cricinfo Server
Observer – Softverski primer
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Decorator Mediator Facade Memento Flyweight Observer Proxy State - Problem koji rešava: rešava Composite Iterator Prototype Singleton Objekat Strategy Visitor
State – Struktura
State – Implementacija prelaza stanja
State – Primer
State – Softverski primer Objekat menja svoje ponašanje kada se njegovo interno stanje promeni!
Osnovi DŠi. SK – Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Flyweight Observer Proxy State Strategy - Problem koji rešava: rešava Facade Memento Objekat Strategy Visitor
Strategija - Model
Strategija – Nesoftevrski primjer Strategija definiše skup algoritama koji se mogu međusobno zamenjivati.
Strategija – Softverski primer Više alternativnih oružja za napad na neprijatelja!
Šabloni ponašanja-Detalji Obuhvat Klasa NAMENA Kreacioni Strukturalni Šabloni ponašanja Factory Method Adapter Interpreter Abstract Factory Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Visitor - Problem koji rešava: rešava Singleton Objekat Decorator Mediator Facade Memento Flyweight Observer Proxy State Strategy Visitor
Posetilac / Model
Posetilac / Model
Posetilac – Primer Java
Posetilac
Posetilac
Posetilac
Posetilac
Posetilac
Posetilac-Primer
Rekapitulacija šablona ponašanja Ako treba da: • Koristimo? Interpretator Lanac odgovornosti
Rekapitulacija šablona ponašanja Ako treba da: Koristimo?
Osnovi DŠi. SK – Rekapitulacija šablona ponašanja Ako treba da: • Koristimo?
Metodologija razvoja softvera Dizajnerski šabloni - Design Patterns Lekcija: 04. Šabloni ponašanja
- Slides: 117