Latest web development tutorials

obserwator wzór

Gdy istnieje wiele relacji między obiektami, należy użyć wzoru obserwatora (obserwatorów wzór). Na przykład, gdy obiekt zostanie zmodyfikowany, to automatycznie powiadamia jego utrzymaniu obiektów. Wzorzec Obserwator należy do wzorców zachowań.

wprowadzenie

Zamiar: zdefiniować zależności między obiektami jednego-do-wielu, gdy stan obiektu zostanie zmieniona, wszystkie obiekty, które od niej zależne są powiadamiane i aktualizowane automatycznie.

Głównie do rozwiązania: stan zgłoszenia zmiany obiektu na problemy innych obiektów, ale także z uwzględnieniem łatwości obsługi i niskiego sprzęgła zapewniają wysoki stopień współpracy.

Kiedy stosować: obiekt (obiekt docelowy) zmienia stan, wszystkie obiekty (obiekty zależne od obserwatora) zostaną powiadomieni, nadawanie powiadomienia.

Jak naprawić: Redakcyjne obiektowego technologii, zależność ta może być osłabiona.

Kod klawisza: klasa abstrakcyjna mieć ArrayList przechowywane obserwatorów.

Przykłady zastosowań: 1, po zakończeniu aukcji, licytujący obserwować najwyższą cenę, a następnie przekazują pozostałym oferentom stawkę.2, Podróż na zachód wewnątrz Wukong żądanie kapitulacji Red Boy Budda, Budda woda rozlana na podłodze starego żółwia prowokować, ten żółw jest obserwatorem, zauważył, że działania Buddy podlewania.

Zalety: 1, obserwator i obserwowane są abstrakcyjne sprzężone.2, do ustanowienia mechanizmu spustowego.

Wady: 1, gdy obserwowany obiekt ma wiele bezpośrednich i pośrednich obserwatora, to powiadamia wszystkich obserwatorów są poświęcić dużo czasu.2, jeżeli nie jest okrągły zależność pomiędzy obserwatorem a obserwowanym celem obserwować cel wywoła rozmowy krążyć między nimi, może spowodować awarię systemu. 3, tryb obserwatora nie ma mechanizmu, aby widz wie, publiczność jest jak obserwowane zmiany, ale po prostu wiem, że zmiany docelowych obserwacji.

Scenariusze użycia: 1, stwardnienie podklasa powszechna metoda i ta sama logika.2 ważne, skomplikowane metody mogą być uważana za metodę szablonu.

Uwaga: 1, JAVA ma już klas obsługiwać tryb obserwatora.2, aby uniknąć odniesień kołowych. 3, jeżeli kolejność wykonywania, widz może spowodować błędy systemu zatrzymany, na ogół używać trybu asynchronicznego.

realizacja

Wzorzec Obserwator przy użyciu trzech klas Temat, obserwatorem i klientem. Temat do obiektu klienta z przedmiotem i obserwatorem jest związany metody obserwatorów wiązanej Rozwiązania dla Klienta od obiektów. TworzymyklasęTematobserwatorklasy abstrakcyjnej i rozszerzenie klasy podmiot klasy abstrakcyjnejobserwatora.

ObserverPatternDemo,nasze zajęcia pokazowe użyciu obiektów klasy i podmiotówpodlegającychwykazywać wzorzec obserwatora.

Wzorzec Obserwator diagram UML

Etap 1

Tworzenie kategorii tematycznej.

Subject.java

import java.util.ArrayList;
import java.util.List;

public class Temat {
	
   Lista Prywatne <Obserwator> obserwatorzy 
      = New ArrayList <Obserwator> ();
   private int state;

   public int getstate () {
      stan powrotu;
   }

   public void setstate (int state) {
      this.state = stan;
      notifyAllObservers ();
   }

   public void dołączyć (obserwator obserwatora) {
      observers.add (obserwator);		
   }

   public void notifyAllObservers () {
      for (Obserwator Obserwator: obserwatorzy) {
         observer.update ();
      }
   } 	
}

Etap 2

Tworzenie klasy obserwatora.

Observer.java

public abstract class Obserwator {
   chronione temat Temat;
   public abstract void aktualizacja ();
}

etap 3,

Tworzenie obserwatora klasy podmiotu.

BinaryObserver.java

public class BinaryObserver rozciąga Observer {

   publicznego BinaryObserver (z zastrzeżeniem Temat) {
      this.subject = podlega;
      this.subject.attach (this);
   }

   @Override
   public void Update () {
      System.out.println ( "Binary wyrażenie:" 
      + Integer.toBinaryString (subject.getState ())); 
   }
}

OctalObserver.java

public class OctalObserver rozciąga Observer {

   publicznego OctalObserver (z zastrzeżeniem Temat) {
      this.subject = podlega;
      this.subject.attach (this);
   }

   @Override
   public void Update () {
     System.out.println ( "Octal wyrażenie:" 
     + Integer.toOctalString (subject.getState ())); 
   }
}

HexaObserver.java

public class HexaObserver rozciąga Observer {

   HexaObserver publicznych (temat Temat) {
      this.subject = podlega;
      this.subject.attach (this);
   }

   @Override
   public void Update () {
      System.out.println ( "Hex wyrażenie:" 
      + Integer.toHexString (subject.getState ()) .toUpperCase ()); 
   }
}

Etap 4

UżyjTemati obserwatorów obiektów podmiotu.

ObserverPatternDemo.java

{public class ObserverPatternDemo
   public static void main (String [] args) {
      Temat subject = Nowy Temat ();

      Nowy HexaObserver (podmiot);
      Nowy OctalObserver (podmiot);
      Nowy BinaryObserver (podmiot);

      System.out.println ( "Pierwsza zmiana stanu: 15");	
      subject.setState (15);
      System.out.println ( "Druga zmiana stanu: 10");	
      subject.setState (10);
   }
}

Etap 5

Sprawdź, czy wyjście.

Pierwsza zmiana stanu: 15
Hex String: F
Ósemkowy String: 17
Binary String: 1111
Druga zmiana stanu: 10
Hex String: a
Ósemkowy String: 12
Binary String: 1010