osztályok megfigyelő

Observer / Megfigyelhető típusok olyan protokoll, amelynek értelmében számos megfigyelő megfigyelő-objektumok bejelentett

bármilyen változtatást vagy kapcsolódó események tetszőleges számú megfigyelhető objektumok. Megfigyelhető objektum által termelt megfigyelhető alosztály, így vezet egy listát Observer tárgyak értesítést a változás a tárgy megfigyelhető. Minden-objektumok „megfigyelő”, szerepel a listán végre kell hajtania az Observer interfészt. Ha a megfigyelt objektum változások történnek megérdemelt

vayuschie figyelmet, vagy az esetben, ha bizonyos események, amelyek érdekesek a megfigyelő, a módszer az úgynevezett notifyObservers megfigyelhető tárgy, amely utal a frissítési módszert minden egyes megfigyelő tárgyak. frissítés Megfigyelhető interfész módszer a következő:

állami absztrakt void frissítés (megfigyelhetően obj, objektum arg)

A módszer neve, amikor a megfigyelendő tárgy tájékoztatnia kell a megfigyelők a változást, vagy valamilyen esemény. arg paraméter lehetővé teszi továbbítását egy tetszőleges tárgy, amely tartalmaz egy leírást a változás a tárgy vagy esemény megfigyelő.

Megfigyelő / Megfigyelhető mechanizmust tervezték sokoldalúságát. Minden osztály megfigyelhető maga határozza meg, hogy mikor és milyen körülmények között kell hivatkozni módszer frissítés Observer objektumot.

Megfigyelhető osztály megvalósítja módszerek fenntartása listáját Observer objektumok beállításához zászló tájékoztatnak a változás a tárgy, valamint hívja a módszer bármelyikét frissíti Observer tárgyakat. A következő módszereket alkalmazzák az olyan megfigyelő objektum lista:

állami szinkronizált void addObserver (Observer o)

Hozzáteszi érv típusú o Observer az objektumok listáját a megfigyelő. állami szinkronizált void deleteObserver (Observer o)

Távolítsuk el az az érv o Observer típusát a listából a megfigyelő tárgyakat. állami szinkronizált void deleteObservers ()

Eltávolítja az összes tárgyat a listából a megfigyelők Observer. állami szinkronizált int countObservers ()

Visszaadja az objektumok száma a megfigyelő.

A következő módszerek értesíti az Observer tárgyakat a változásokat:

állami szinkronizált void notifyObservers (Object arg)

Értesítse az Observer kifogásolja, hogy a megfigyelt tárgy, valami történt, majd visszaállítja a zászló változások az objektumot. Minden tárgy megfigyelő szerepel a listán, az úgynevezett ő módszere frissítés, az első paraméter a megfigyelhető objektum, és a második - arg.

public void notifyObservers ()

A következő példa azt mutatja, hogy a megfigyelő / Megfigyelhető protokoll használható figyelemmel kíséri a regisztrált felhasználók a rendszerben. Először is, meg egy osztály Felhasználók nyúlik figyelhető meg:

public class Felhasználók kiterjed Megfigyelhető

privát hash loggedin = új hash tábla ();

public void bejelentkezés (String név, string jelszó)

// módszer kivételt dob ​​BadUserException if (! PasswordValid (név, jelszó)

dobja új BadUserException (név);

UserState state = new UserState (név); loggedIn.put (név, állapot); setChanged ();

public void logout (UserState állam)

Felhasználók kifogást tartalmaz egy listát az aktív felhasználók, és mindegyik megkapja az objektum UserState. Amikor valaki a felhasználó bejelentkezik vagy leáll, akkor az összes objektum Observer át tárgya UserState. notifyObservers eljárás üzeneteket küld megfigyelőket, csak abban az esetben változik az állam a megfigyelt objektum, így azt is meg kell hívni setChanged eljárás felhasználók különböző notifyObservers nem csinál semmit. Továbbá módszer setChanged, van két módszer megváltoztatása az állam zászló: clearChanged megfigyelhető jelek az objektumot megváltoztathatatlan és hasChanged visszatér egy logikai zászló értékét.

Az alábbiakban bemutatjuk, hogyan kell frissíteni a végrehajtás nézhet ki az Observer tárgy, folyamatosan követi a készítmény regisztrált felhasználók:

public class Eye megvalósítja Observer

nyilvános Eye (Users felhasználó)

public void frissítés (Megfigyelhető felhasználók Object whichState)

if (felhasználó! = figyeli)

dobja új IllegalArgumentException ();

UserState állapotban = (UserState) whichState;

adduser (állami); // egy listát

RemoveUser (állami); // a listáról törölni

Minden objektum Eye figyel egy adott objektumot felhasználók. Amikor a felhasználó belép vagy kilép, Eye objektum bejelentett, mivel a kivitelező az úgynevezett addObserver Eljárás felhasználói objektum, amelyben a Eye objektum meg van adva, mint a tárgya egy megfigyelő. Amikor hívja módszer frissítés következik

ellenőrizze, hogy a beállítások és a változás megjelenített információ attól függően, hogy a felhasználó be van jelentkezve, vagy kiment.

Ellenőrzés, hogy mi történik egy tárgy UserState, ebben az esetben a

egyszerű. Azonban lehet kerülni - meg kell ahelyett, hogy a tárgy maga UserState át egy átalakító objektum, ami leírja, mit és kinek. Ez úgy néz ki, világosabb és könnyebben új funkciókat anélkül, hogy elszakadna a meglévő kódot.

Megfigyelő / Megfigyelhető mechanizmus valamivel, mint a várakozás / értesíti mechanizmus folyamok leírt o. Azonban ez rugalmasabb és kevésbé korlátozások. áramlási mechanizmus biztosítja, hogy egyidejű hozzáférést megvédi a program a kedvezőtlen hatásokat a multitasking. Monitoring mechanizmus lehetővé teszi, hogy szervez-e kapcsolat a résztvevők önálló használható szálak. Mindkét előírt mechanizmusok az információ szolgáltató (Megfigyelhető tárgy okozva értesíti) és az ügyfél (OBS e rver és az objektum, ami vár), de

azok megfelelnek a különböző igényeket. Használja a várakozás / értesítik, amikor a mechanizmus során figyelembe kell venni a sajátosságait patakok és Megfigyelő / Megfigyelhető az általánosabb esetben.

Készítsen végrehajtás tulajdonított felület, ahol Observer / Megfigyelhető mechanizmus

használni, hogy felhívja a megfigyelők bekövetkezett változások c tárgyakat.

Kapcsolódó cikkek