Tasarım Desenleri - Gözlemci Deseni

Gözlemci deseni, nesneler arasında bire çok ilişki olduğunda kullanılır, örneğin bir nesne değiştirilirse, bağımlı nesnelerine otomatik olarak bildirilir. Gözlemci örüntüsü, davranış kalıbı kategorisine girer.

Uygulama

Gözlemci kalıbı üç oyuncu sınıfı kullanır. Konu, Gözlemci ve Müşteri. Özne, gözlemcileri bir istemci nesnesine bağlamak ve onları ayırmak için yöntemlere sahip bir nesnedir. Biz soyut sınıf oluşturduk Observer ve bir beton sınıfı Konu sınıfı uzanan Gözlemci .

Demo sınıfımız olan ObserverPatternDemo , gözlemci modelini eylem halinde göstermek için Subject ve somut sınıf nesnesini kullanacaktır.

Aşama 1

Konu sınıfı oluşturun.

Subject.java

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

public class Subject {
	
   private List<Observer> observers = new ArrayList<Observer>();
   private int state;

   public int getState() {
      return state;
   }

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

   public void attach(Observer observer){
      observers.add(observer);		
   }

   public void notifyAllObservers(){
      for (Observer observer : observers) {
         observer.update();
      }
   } 	
}

Adım 2

Observer sınıfı oluşturun.

Observer.java

public abstract class Observer {
   protected Subject subject;
   public abstract void update();
}

Aşama 3

Somut gözlemci sınıfları oluşturun

BinaryObserver.java

public class BinaryObserver extends Observer{

   public BinaryObserver(Subject subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); 
   }
}

OctalObserver.java

public class OctalObserver extends Observer{

   public OctalObserver(Subject subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
     System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) ); 
   }
}

HexaObserver.java

public class HexaObserver extends Observer{

   public HexaObserver(Subject subject){
      this.subject = subject;
      this.subject.attach(this);
   }

   @Override
   public void update() {
      System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() ); 
   }
}

4. adım

Özne ve somut gözlemci nesneler kullanın .

ObserverPatternDemo.java

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

      new HexaObserver(subject);
      new OctalObserver(subject);
      new BinaryObserver(subject);

      System.out.println("First state change: 15");	
      subject.setState(15);
      System.out.println("Second state change: 10");	
      subject.setState(10);
   }
}

Adım 5

Çıkışı doğrulayın.

First state change: 15
Hex String: F
Octal String: 17
Binary String: 1111
Second state change: 10
Hex String: A
Octal String: 12
Binary String: 1010