Tasarım Desenleri Türkçe Kaynak
  • Başlarken
    • 👋Giriş ve Tanışma
  • Nesne Yönelimli Programlama
    • Nesne Yönelimli Programlama Nedir ?
  • S.O.L.I.D
    • S.O.L.I.D Nedir?
  • Tasarım Desenleri
    • Tasarım Deseni Nedir ?
      • Creational (Oluşturucu) Tasarım Desenleri
        • 💎Singleton
        • 🏭Factory
        • 🏭🏭 Abstract Factory
        • ⛏️ Builder
        • 🐑Prototype
      • Structural (Yapısal) Tasarım Desenleri
        • 🔌Adapter
        • 🌉Bridge
        • 🌲Composite
        • 🎺Decorator
        • 📦Facade
        • 🌫️ Flyweight
        • 🔍Proxy
      • Behavioral (Davranışsal) Tasarım Desenleri
        • ⛓️ Chain of Responsibility
        • ⚔️Command
        • 🈂️ Interpreter
        • 🚶‍♂️ Iterator
        • 🗼Mediator
        • ↪️ Memento
        • 👓Observer
        • 🤔State
        • 💪Strategy
        • 📥Template
        • 🏃‍♀️ Visitor
  • Kapanış
    • Kapanış & Kaynakça
Powered by GitBook
On this page
  1. Tasarım Desenleri
  2. Tasarım Deseni Nedir ?
  3. Behavioral (Davranışsal) Tasarım Desenleri

Observer

Previous↪️ MementoNextState

Last updated 2 years ago

Observer tasarım deseni, bir nesnede meydana gelen değişikliği içinde bulunduğu listedeki tüm elemanlara bildiren tasarım desenidir.

Aşağıda bu tasarım desenine ait UML diyagramı bulunmaktadır.

  • Observer: Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür. Duruma göre soyut sınıf (abstract class) da olabilir.

  • ConcreteObserver: Observer arayüzünü uygulayan, değişimi takip eden sınıflardır. Değişim update metotu ile bildirilir.

  • Observable: Takip edilecek olan yapımızdır. İçerisinde Observer (değişimden etkilenecek) nesneleri tutar.

  • ConcreteObservable: Observer sınıfından türerler.

Senaryo olarak kullanıcılarımızın olduğunu ve bu kullanıcıların fiyatını takip ettiği bir ürün olduğunu farz edelim. Ürün fiyatı değiştikten sonra takip eden kullanıcılara bir mesaj gittiğini düşünelim.

C# Kod Örneği:

// Değişimden etkilenecek, izleyecek olan sınıfların uyguladığı arayüzdür.
// UML diyagramındaki Observer yapısına denk gelmektedir.
interface IObserverUser
{
    void SendNotification(ProductUpdateMessage message);
}
// Observer arayüzünü uygulayan, değişimi takip eden sınıflardır.
// Değişim update metotu ile bildirilir.
// UML diyagramındaki ConcreteObserver yapısına denk gelmektedir.
class ObserverUser : IObserverUser
{
    public void SendNotification(ProductUpdateMessage message)
    {
        Console.WriteLine(message.ToString());
    }
}
// Bildirilecek olan nesnelere paremetre olarak giden mesaj.
// UML diyagramı ile ilgisi yoktur.
class ProductUpdateMessage
{
    public string productName;
    public string message;

    public override string ToString()
    {
        return $"{productName} updated. Message: {message}";
    }
}
// Takip edilecek olan yapımızdır.
// İçerisinde Observer (değişimden etkilenecek) nesneleri tutar.
// UML diyagramındaki Observable yapısına denk gelmektedir.
abstract class ObservableProduct
{
    private List<IObserverUser> _users;
    protected ProductUpdateMessage message;

    public ObservableProduct()
    {
        _users = new List<IObserverUser>();
        message = new ProductUpdateMessage();
    }

    public void AddObserver(IObserverUser observerUser)
    {
        _users.Add(observerUser);
    }

    public void RemoveObserver(IObserverUser observerUser)
    {
        _users.Remove(observerUser);
    }

    public void NotifyObserver()
    {
        foreach (IObserverUser user in _users)
        {
            user.SendNotification(message);
        }
    }
}
// Observer sınıfından türer.
// UML diyagramındaki ConcreteObservable yapısına denk gelmektedir.
class Samsung : ObservableProduct
{
    // Ürün fiyatı değiştikten sonra Observer örneklerine bildirim gönderilir.
    public void ChangePrice()
    {
        // Ürün fiyatlarının güncellenmesi vs.

        this.message.productName = "Samsung";
        this.message.message = "Samsung's price updated.";
        this.NotifyObserver();
    }
}
// Güncellemeden etkilenecek olan sınıf örnekleri.
IObserverUser mehmet = new ObserverUser();
IObserverUser derya = new ObserverUser();
IObserverUser sema = new ObserverUser();
IObserverUser aleyna = new ObserverUser();


// İzlenecek olan sınıf örneği.
Samsung samsung = new Samsung();

// İzlenecek olan sınıfa etkilenecek olan nesnelerin atanması.
samsung.AddObserver(mehmet);
samsung.AddObserver(derya);
samsung.AddObserver(sema);
samsung.AddObserver(aleyna);

samsung.ChangePrice();

// output:
//  Samsung updated. Message: Samsung's price updated.
//  Samsung updated. Message: Samsung's price updated.
//  Samsung updated. Message: Samsung's price updated.
//  Samsung updated. Message: Samsung's price updated.

Bu tasarım deseninin JAVA ve diğer diller için olan uygulamasını bulabilirsiniz.

👓
bu tasarım deseni için oluşturulmuş klasörde
observer-uml