Observer - a megfigyelői (tervezési minták), a gömb
Megfelelni az új követelményeknek az ügyfél, azt látjuk, az előnyöket az architektúra alapú interfész. Annak érdekében, hogy fel lehessen feliratkozni jogi személyek, egyszerűen hozzon létre egy osztályt Company. Az egyetlen dolog, mely szemben állt az első példa, hogy ez is végrehajtja Subsciber felület.
Nem kell változtatni a kiadó osztályban. Az a tény, hogy az általa használt absztrakció Előfizető.
Kimenet képernyő eltér az első példa. Remélem, hogy nincs szükség megmagyarázni, hogy ez a kód pontosabb és könnyebb karbantartani.
Most beszéljünk ezt a mintát az elméletet.
Megjegyzés: a chart. Azok, akik feliratkozni az osztályok nevezett tárgyak és azok, akik feliratkozás úgynevezett megfigyelők. Példánkban az alany előfizethető felületet, és megfigyelők Előfizető felület. Ennek megfelelően a végrehajtás volt ConcreteSubject és ConcreteObserver
On Tárgy séma lehet egy osztály vagy egy interfész. Lehetőség, ha ez a felület több rugalmas, legalábbis java így. Ennek az az oka, hogy a Java nem lehet többszörös öröklés. Tárgy Ha az osztály már valaki másnak a leszármazottja, akkor valamennyire korlátozza rád. Nincs ilyen korlátozás, ha dolgozik az interfészt.
Observer is lehet egy osztály vagy interfész, az azonos hatásokat.
Nem feltétlenül nagyon pontosan kövesse az UML Sémasablon. Mi szeretnénk, hogy annak előnyeit, és nem másolja a séma a kódot. Nem hagyja linkek, téma-specifikus megvalósítások a megfigyelő, ahogy azt az ábra mutatja. Lásd a szaggatott vonal ConcreteObserver. És nem hoz létre lehet / setState módszer ConcreteSubject.
Ne feledje, hogy a téma nem tud semmit a végrehajtás a megfigyelők.
Az Observer minta meghatározza az arány a „one-to-sok kapcsolat” az objektumok között.
Egy személy - sok megfigyelő.
Így, hogy állapotának megváltoztatásával egy tárgy automatikusan figyelmeztető és frissítése minden függő objektumokat.
Függő objektumok megfigyelők.
- Az egyetlen dolog, tudta, hogy a tárgya a megfigyelő, hogy megvalósítja az Observer interfészt. Ez lehetővé teszi számunkra, hogy új típusú megfigyelő módosítása nélkül a témát.
- Új megfigyelők feliratkozhatnak és leiratkozni megkapják a frissítéseket bármikor.
- A téma és a megfigyelő újra fel lehet használni.
- Megváltoztatása az egyik nem befolyásolja a másik.
Én hozzá a fenti az a tény, hogy a munka a kódot nem függ a rendelést éber megfigyelőket.
A Java, van egy beépített minta podderzhkadannogo
Ez java.util.Observable osztály, bővíti tárgyak. Már beszéltünk a korlátozásokat, hogy ró ránk végrehajtásában öröklés az osztály. Még mindig ott java.util.Observer az interfész a megfigyelők.
Nézzük újra a legutóbbi például úgy, hogy az adatokat használó osztály és interfész.
Az első dolog, amit tennie, távolítsa el interfészek.
Osztályok Társaság és Személyi most az interfészt megvalósító Observer. A frissítési mód a második paraméter kap egy hivatkozás a tárgy naplót.
Class kiadó már nem felelős a jegyzési és leiratkozás. Mindezek a módszerek, amelyek az ő őse. Ez jó hír, mert most nem kell végrehajtani őket a saját. Különösen azért, mert ezek a módszerek szinkronizált. Annak érdekében, hogy a dolgok, azt is meg kell emlékezni arról setChanged módszer, amely bekapcsolja az állam az osztály a „Edit” menüből. Ha ez nem történik meg, a megfigyelők nem kapnak frissítéseket.
Kimenet képernyő ugyanaz, mint az előző példákban.
A JDK, több ilyen osztályok és interfészek. Például, az osztály java.beans.PropertyChangeSupport és java.beans.PropertyChangeListener interfész
Ha nem lehet lusta, nézd meg magad.
Egy másik típusú megfigyelők
Ha a szerkesztők még engedni, újságok, tudtuk végrehajtani a minta egy kicsit másképp. Annak érdekében, hogy nagyobb rugalmasságot biztosítani a osztályokba. Megfigyelők kaphat akár egy újság vagy magazin. Csak erre kell tenniük a kérelem egy megfelelő getter.
Például egy személy csak azt írja, magazinok, de a cég csak újságot. Ezt úgy lehet elérni anélkül, hogy a Java-iai megvalósítása ezt a sablont. Például halad utalás bármely megfigyelő kiadása. Teljesen kód nem vezet, próbálja végrehajtani magad.
Olvasson könyveket, eddig!