Observer Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda tasarım desenlerinden biri olan observer tasarım desenini anlatacağım. Hadi başlayalım !
Table of Contents
Aslında bu tasarım deseni diğer tüm tasarım desenlerinde de olduğu gibi C# diline özgü bir kavram değil, tüm nesne yönelimli programlama dillerinde daha temiz kod yazabilmek için oluşturulmuş ve yazılımcılar tarafından da kabul görmüş yazılı olmayan kurallardır ve nesne yönelimli programlama yapılabilen tüm dillerde uygulanabilmektedir.
Observer Tasarım Deseni
Observer tasarım deseni, davranışsal bir tasarım desenidir ve nesneler arasındaki birçok ilişkiyi yönetir. Bu desen, bir nesnenin durumunda meydana gelen değişiklikleri izleyen ve birçok başka nesneye bu değişiklikleri bildiren bir “izleyici” nesne kullanır. Bu, sık sık “birçoklu yayın-abonelik” modeli olarak adlandırılır.
Temel Yapıları
İlk olarak, Observer tasarım desenindeki temel yapıları tanımlayalım. Bu tasarım deseni, aşağıdaki temel unsurlardan oluşur:
- İzleyici arabirimi (Observer Interface): Bu arabirim, izleyicilerin uygulanması gereken metodları belirler.
- Konu arabirimi (Subject Interface): Bu arabirim, konu nesnesinin uygulaması gereken metodları belirler.
- İzleyici (Observer) sınıfı: Bu sınıf, izleyicilerin uyguladığı arabirimdir.
- Konu (Subject) sınıfı: Bu sınıf, konu nesnesinin uyguladığı arabirimdir.
- Konu (Subject) sınıfının içindeki veriler: Bu veriler, konu nesnesinin durumunu temsil eder.
C# İle Uygulanması
Şimdi, bir C# kod örneğiyle Observer tasarım deseninin nasıl uygulanacağını görelim.
// İzleyici arabirimi
public interface IObserver
{
void Update(ISubject subject);
}
// Konu arabirimi
public interface ISubject
{
void RegisterObserver(IObserver observer);
void RemoveObserver(IObserver observer);
void NotifyObservers();
}
// İzleyici sınıfı
public class Observer : IObserver
{
public void Update(ISubject subject)
{
// Değişikliklerden haberdar olun
Console.WriteLine("Observer: Bir değişiklik oldu.");
}
}
// Konu sınıfı
public class Subject : ISubject
{
private List<IObserver> _observers = new List<IObserver>();
private int _state;
public int State
{
get => _state;
set
{
_state = value;
NotifyObservers();
}
}
public void RegisterObserver(IObserver observer)
{
Console.WriteLine("Kaydedildi.");
_observers.Add(observer);
}
public void RemoveObserver(IObserver observer)
{
_observers.Remove(observer);
}
public void NotifyObservers()
{
Console.WriteLine("Bildirim gönderildi.");
foreach (var observer in _observers)
{
observer.Update(this);
}
}
}
// Kullanım
var subject = new Subject();
var observer1 = new Observer();
var observer2 = new Observer();
var observer3 = new Observer();
subject.RegisterObserver(observer1);
subject.RegisterObserver(observer2);
subject.RegisterObserver(observer3);
subject.State = 1;
// Output: Kaydedildi.
// Output: Kaydedildi.
// Output: Kaydedildi.
// Output: Bildirim gönderildi.
// Output: Observer: Bir değişiklik oldu.
// Output: Observer: Bir değişiklik oldu.
// Output: Observer: Bir değişiklik oldu.
subject.RemoveObserver(observer2);
subject.State = 2;
// Output: Bildirim gönderildi.
// Output: Observer: Bir değişiklik oldu.
// Output: Observer: Bir değişiklik oldu.
Yukarıdaki örnekte, Observer tasarım deseni kullanılarak bir konu nesnesi (Subject) ve birkaç izleyici nesnesi (Observer) oluşturduk. Konu nesnesinin içinde bir “state” adlı bir veri var ve konu nesnesindeki “State” özelliği değiştirildiğinde, izleyicilere bildirim gönderiliyor.
Örnekteki kod, önce üç izleyiciyi kaydeder, daha sonra konu nesnesinin durumu değiştirildiğinde bu izleyicilere bildirim gönderir. Son olarak, bir izleyiciyi kaydırmayı ve konu nesnesinin durumunu yeniden değiştirmeyi denedik.
Sonuç
Bu örnek, Observer tasarım deseninin C# ile nasıl kullanılabileceğini göstermek için oldukça basit bir örnektir. Gerçek dünya senaryolarında, Observer tasarım deseni, birçok nesne arasındaki karmaşık etkileşimleri yönetmek için kullanılabilir.
Evet observer tasarım deseni ve C# ile uygulanması bu şekilde olmakta. Tüm C# yazılarımıza buraya, diğer tasarım deseni yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.