Yukarı Çık

Observer Tasarım Deseni

25 Mayıs 2022   0 Yorum

Observer tasarım deseni behavioral(davranışsal) tasarım kalıbı grubundadır.

Observer tasarım deseni, birden fazla nesneyi takip ettikleri başka bir nesnede gerçekleşen olaylarla ilgili bilgilendirme sağlar. Abonelik sistemi diyebiliriz.

Bir nesnenin durumu değiştiğinde, bütün bağımlılarına bildirilir.
 

 

Subject: Takip edilecek olan nesnemiz.

Observer: Abstract gözlemci sınıfımız. Birden fazla nesneye abonelik sağlamak.

Concrete subscribers: Takip eden nesnemiz.

Observer’lar Subject’e bağımlıdır.

Subject’in durumu değiştiğinde gözlemcilere haber verilir.

Observer Tasarım Deseninde loosely coupled ilişkisi vardır.

Loosely Coupled : Gevşek bağlantı, etkileşim ve bağımlılık en az düzeyde ve diğer sınıfın işine müdahale etmeden bağlıdırlar.

Örnek olarak, abone olan tüm kişilere abone oldukları classtan mesaj gitmesin sağlayan Java kodu:

Yayıncı, mesajı abone olan tüm gözlemcilere yayınlayacak 

public interface Subject 
{
    public void ekle(Observer observer);
    public void cikar(Observer observer);
    public void guncellemeBildir(Message message);
}
 public class MesajYayinla implements Subject {
     
    private List<Observer> observers = new ArrayList<>();
 
    @Override
    public void ekle(Observer observer) {
        observers.add(observer);
    }
 
    @Override
    public void cikar(Observer observer) {
        observers.remove(observer);
    }
 
    @Override
    public void guncellemeBildir(Message message) {
        for(Observer observer: observers) {
            observer.update(message);
        }
    }
}
public interface Observer 
{
    public void guncelle(Message message);
}
public class MesajAboneBir implements Observer 
{
    @Override
    public void guncelle(Message message) {
        System.out.println("MesajAbone1 : " + message.getMessageContent());
    }
}
public class MesajAboneIki implements Observer 
{
    @Override
    public void update(Message message) {
        System.out.println("MesajAboneIki: " + message.getMessageContent());
    }
}
public class Message 
{
    final String messageContent;
     
    public Message (String m) {
        this.messageContent = m;
    }
 
    public String getMessageContent() {
        return messageContent;
    }
}

Ana class:

public class Main{
    public static void main(String[] args) {
        MesajAboneBir abone1 = new MesajAboneBir();
        MesajAboneIki abone2 = new MesajAboneIki();

        MesajYayinla msg = new MesajYayinla();

        msg.ekle(abone1);
        msg.ekle(abone2);

        msg.guncellemeBildir(new Message("İlk Mesaj"));  

        msg.cikar(abone1);

        msg.guncellemeBildir(new Message("İkinci Mesaj")); 

    }
}

 


0 Yorum