Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Viselkedési minták Behavioral patterns
2
Chain of Responsibility
3
Chain of Responsibility
Cél A hívást nem egy konkrét objektum kapja meg, hanem az objektumok egy lánca. A kérés végigmegy a lánc objektumain, amiig valamelyik fel nem dolgozza. Alkalmazási terület Egynél több objektum is feldolgozhat egy kérést. És előre nem tudhatjuk, melyik fogja megtenni. A handler kiderítése automatikus legyen Egy kérést néhány objektumnak szeretnénk elküldeni anélkül, hogy a konkrét vevőt meghatároznánk A kérést kezelni tudó objektumok körét dinamikusan akarjuk megadni.
4
Command Cél Alkalmazási terület
A kéréseket egy objektumba zárni. Így a klienst többféle kéréssel parametrizálhatjuk, a kéréseket sorba állíthatjuk vagy loggolljuk, visszavonható műveleteket tárolhatunk Alkalmazási terület Egy végrehajtandó művelettel parametrizálhatunk egy objektumot. A parancsok a callback függvények OO megfelelői. A kérések különböző időben való létrehozása, sorbaállítása, végrehajtása. A Command objektumnak az eredeti kéréstől független, saját életciklusa van. A visszavonható műveletek támogatására. A Command interfész rendelkezhet egy Unexecute művelettel, ami az előző hívást eredményét visszacsinálja
5
Command
6
Command
7
Command
8
Interpreter Cél Alkalmazási terület
Egy adott nyelv nyelvtanának megtestesítése. Ezt használja egy fordító, amely a nyelv kifejezéseit fordítja le. Alkalmazási terület Amikor egy nyelvet kell lefordítani, ahol a kifejezéseket egy absztrakt szintaktikai fa írja le. A legjobb az, ha a nyelv egyszerű, a hatékonyság nem kritikus fontosságú.
9
Interpreter
10
Iterator Cél Alkalmazási terület
Egy aggregát objektum egymásutáni elemeihez való hozzáférés biztosítása anélkül, hogy annak a megvalósítását feltárnánk Alkalmazási terület Egy aggregát objektum tartalmához való hozzáférés esetén, a belső reprezentáció feltárása nélkül Az aggregát objektumhoz több iterátor támogatása A különböző aggregát struktúrákhoz egységes iterációs interfész biztosítása
11
Iterator
12
Mediator Cél Alkalmazási terület
Hozzunk létre egy olyan objektumot, ami egy objektumcsoport együttműködését támogatja. A Mediator pattern elősegíti a laza objektumkapcsolatot, hiszen az egyes objektumok nem hivatkoznak explicit módon egymásra. Az együttműködés módja így egymástól függetlenül módosítható Alkalmazási terület Egy objektumcsoport tagjai egymással jól definiált, de komplex módon működnek együtt. A kölcsönös függőséget nehéz megérteni Egy bonyolult objektum kódjának felhasználásakor, amelyik sok más objektummal kommunikál Osztályok közötti elosztott viselkedést kell módosítanunk, de alosztályok létrehozása nélkül
13
Mediator
14
Mediator
15
Memento Cél Alkalmazási terület
Az egységbezárás megsértése nélkül mentsük el az objektum belső állapotát. Az objektum állapota így később visszaállítható lesz. Alkalmazási terület Az objektum (egy részének) pillanatnyi állapotát el kell menteni, illetve később az állapotot visszaállítani, és Az állapot lekérdezését lehetővé tévő közvetlen interfész megmutatná az implementációt, ami sérti az egységbezárást.
16
Memento
17
Observer Cél Hogyan tudják objektumok értesíteni egymást állapotuk megváltozásáról anélkül, hogy függőség lenne a konkrét osztályaiktól Példa MVC vagy Document-View architektúra A felhasználó megváltoztatja az egyik nézeten az adatokat, hogyan frissítsük a többit?
18
Observer
19
Observer Szereplők a klasszikus megvalósításban Subject Observer
Tárolja a beregisztrált Observer-eket Interfészt definiál Observer-ek be- és kiregisztrálására valamint értesítésére Observer Interfészt definiál azon objektumok számára, amelyek értesülni szeretnének a Subject-ben bekövetkezett változásról (Update művelet) ConcreteSubject Az observer-ek számára érdekes állapotot tárol Értesíti a beregisztrált observer-eket, amikor az állapota megváltozik ConcreteObserver Referenciát tárol a megfigyelt ConcreteSubject objektumra Olyan állapotot tárol, amit a megfigyelt ConcreteSubject állapotával konzisztensen kell tartani Implemetálja az Observer interfészét (Update művelet), ez az, amit a Subject meghív, amikor a ConcreteSubject állapota megváltozik. Ebben frissíti a saját állapotát a megfigyelt ConcreteSubject állapotának megfelelően
20
Observer
21
State Cél Alkalmazási terület
Egy objektum változtathassa meg a viselkedését, amikor a belső állapota megváltozik. Úgy tűnik, mintha az objektum az osztályát változtatta volna meg Alkalmazási terület Az objektum viselkedése a belső állapotától függ, és e viselkedést valós időben változtatni kell A műveleteknek nagy, az objektum belső állapotától függő feltételes utasításaik vannak. A State tervezési minta minden feltétel ágat külön osztályba tesz. Így egy objektum állapotát egy külön objektumba helyez, ami a többi objektumtól függetlenül módosítható.
22
State
23
Strategy Cél Alkalmazási terület
Algoritmus családokat definiálunk, az algoritmusokat különválasztjuk, és csereszabatossá tesszük. Strategy segítségével az algoritmusok közül választhatunk függetlenül a klienstől Alkalmazási terület Olyan osztályaink vannak, amelyek csak viselkedésükben különböznek. A Strategy segítségével az osztályunkat a sok viselkedés egyikével ruházhatjuk fel. Egy algoritmus különböző változataira van szükségünk. A Strategy-t akkor használhatjuk, ha ezeket az algoritmusokat osztályhierarchiában implementáltuk Az algoritmus olyan adatot használ, amiről a kliensnek nem kell tudnia. A Strategy tervezési minta segít elkerülni a komplex, algoritmus specifikus adatok feltárását. Egy osztály sokféle viselkedést definiál, amelyek a műveleteiben többször megjelennek feltételként.
24
Strategy
25
Template Method Cél Példa
Egy műveleten belül algoritmus vázat definiál, és ennek néhány lépésének implementálását a leszármazott osztályra bízza. Példa Framework-ben dokumentum megnyitás. A framework-ben legyen adott két osztály, Application és Document. Ezekből kell a programozónak egy-egy saját osztály leszármaztatnia, amikben megvalósítja az alkalmazás specifikus viselkedést.
26
Template Method Következmények
A példában az OpenDocument egy ún. template method Meghatározza a műveletek sorrendjét Meghív néhány absztrakt műveletet, melyeket a leszármazott osztályban felül kell definiálni, hogy meghatározott viselkedést rendeljünk hozzá az aktuális igényeknek megfelelően Következmények Lehetővé teszi ún. hook függvények definiálását: kiterjesztési pontok Lehetővé teszi, hogy az algoritmus invariáns részeit egy helyen definiáljuk, és a változó részeket a leszármazott osztályban adjuk meg Kód duplikálás elkerülése: a hierarchiában a közös kódrészeket a szülő osztályban egy helyen adjuk meg (template method), ami a különböző viselkedést megvalósító egyéb műveleteket hívja meg. Ezeket a “különböző viselkedést megvalósító egyéb műveleteket” a leszármazott osztályban felül kell/lehet definiálni.
27
Template Method
28
Visitor Cél Alkalmazási terület
Egy objektum struktúra elemein végrehajtandó műveletet testesít meg. A Visitor segítségével új művelet definiálható anélkül, hogy megváltoztatnánk azt az osztályt amin a műveletet végrehajtjuk. Alkalmazási terület Az objektumstruktúra különböző interfészekkel rendelkező osztályt tartalmaz. A műveleteket ezeken az objektumokon szeretnénk végrehajtani – a konkrét osztályaiktól függetlenül Számos össze nem függő műveletet kel végrehajtani egy objektumstruktúra ragjain, és nem szeretnénk „összeszemetelni” az osztályaikat ezekkel a műveletekkel. Az objektumstruktúrát meghatározó objektumok ritkán változnak, de gyakran kell új műveletet adni a struktúrához.
29
Visitor
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.