Observer minta java

Kérésére az olvasók egy másik cikk tervezési minták szentelni minta Observer (megfigyelő). Ez a kialakítás minta is ismert név alatt eltartott (slave) és a Publisher-előfizetői (kiadó-Előfizető).







Végrehajtásának ezt a mintát használják állapotának figyelésére tárgyak a rendszerben. Ha az állam a tárgyak során változott életciklusuk, a megfigyelő a rendszer értesíti a másikat ezeket az eseményeket.

Ebben a cikkben megpróbálom olyan egyszerű és intuitív, akkor lehet mondani erről a minta és példa kódot Java, végrehajtja az Observer.

Bizonyos esetekben a Watcher?

  • Ha az egyik célja az, hogy az üzenetek továbbítását tárgyak, de nem tudja, vagy nem is tudnak a belső szerkezet;
  • Ha meg kell változtatni más tárgyak, ha változtatni egy tárgy;
  • Hogy megakadályozzák a közötti szoros kapcsolatokat a rendszer tárgyakat;
  • Állapotának nyomon követéséhez egyes rendszer létesítmények;

Observed (megfigyelhető) tárgy, hanem a tárgy, vagy azokra, kell interfészt biztosítanak a nyilvántartásba vétel és de-regisztrációs megfigyelők (hallgatók).

De megfigyelők maguk legalább egy nyitott módszer, amely révén, és legyen óvatos, hogy módosítsa a páciens állapotától. Ezt a módszert gyakran említett értesíti.

Mivel a monitorok is elég sokat, hogy egyszerűsítse a munka velük, akkor a gyűjtemény (gyűjtemény megfigyelők). Körülbelül a kódot használom ebben az esetben:

Class EmptyObserver hasznos lehet abban az esetben, ha a megfigyelő elegendő nagyszámú értesíti módszerekkel. Ezután a névtelen osztályok könnyen teremt szükséges a számunkra „magasan képzett” megfigyelők (amelyek korlátozott számú alkalmazott módszerek) on the fly:







Ezután egy példánya a megfigyelők helyezni a tárgyat, amelyre figyelemmel kell kísérni. Minden területen kódot, ahol a tevékenység zajlik mi érdekli az osztályban, feltéve, adjunk hozzá egy hívást, hogy értesíti a megfelelő módszer a gyűjtemény megfigyelők:

A klasszikus példa a minta Observer - olyan osztályok Java Swing csomagot. A Swing A megfigyelő mintát használnak gyenge egymásrautaltsága a szervezeti modell és a grafikus objektumokat. értesíti módszerek kerülnek alkalmazásra, amikor a változó tulajdonság értékek modell és továbbítja az információt a kütyü.

By the way, én nagyon ajánlom, hogy mindenki lássa a Java Swing forráskódját. Ez tényleg egy nagyon jó minőségű tervezett könyvtár.

Mit szólnál támogatja a multi-threading és szinkronizálását a bejelentett objektumok listáját?

Az expozíció miatt a holtpont nem hívásértesítést, lezárni ezt a listát ...

1) a bejelentett Minden objektumnak van egy referencia-száma, ami a adva a lista növekszik, és a távolsággal csökken;

2) Munka a lista által vezérelt egy szinkronizálási primitív;

3) Ha a másolni kívánt értesítési listában által Locke, miközben növeli az összes objektum hivatkozási számát (a legkényelmesebb használni autopointerov listája ATL :: CComPtr típus), távolítsa el a zárat, és értesíti a hallgatók a listán a másolatot, majd csökkentse a referencia számít.

Ítélve a példát nem lát különbséget a hallgatók és a visszahívás-E? Vagy ez ugyanaz? proyanite kérjük ezen a ponton sem primerchik felvázolni a különbséget kérem!

Yarik: A fő különbség a hallgató visszahívás, amelyet visszahívás lehet egy (vagy nincs, írok Delphi, mert nulla). hallgató's is lehet akárhány. Van azonban egy kivétellel. Listenery ha sokan közülük nem tudják egymásról. És abban az esetben, visszahívás is smastryachit lánc visszahívás (mint minden WinAPI, például SetWindowsHookEx vagy SetCliboardViewer) ,, míg ez az „ismernek” korábbi ustenovlennom (előző) visszahívási és tudja, hogy a „felső” a hierarchia lógott utolsó bejegyzett visszahívás. Ami engem illet, így az ötlet visszahívás több „bennszülött”, mint a hallgatót. Bár, ha csak azért, mert én is jól irányítani: szeretnék nevezni az utolsó, első, vagy a körülményektől függően nem okoz későbbi visszahívás ( „eszik” event). Abban az esetben, a hallgató, hogy ilyesmire nem lehet. De a naplózás a modell hallgató sokkal egyszerűbb: nem átmeneti változókat, nincs probléma a modellek hívja stdcall, cdecl stb - egyszóval skukota.




Kapcsolódó cikkek