Observer Pattern: Olaylara Tepki Veren Esnek Yapı


 

Observer Pattern Nedir?

Observer Pattern (Gözlemci Tasarım Deseni), bir nesnede olan değişikliği, bu nesneyi izleyen diğer nesnelere otomatik olarak bildiren bir yapıdır.


Basit Tanımıyla:

Bir nesne değiştiğinde, ona abone olan (gözlemleyen) tüm nesnelerin haberdar olmasını sağlar.

Ne İçin Kullanılır?

  • Bir olay gerçekleştiğinde birden fazla işlemin tetiklenmesi isteniyorsa

  • Kodun esnek ve modüler olması amaçlanıyorsa

  • İf-else zinciri kurmadan, farklı bileşenlerin bir olaya tepki vermesi gerekiyorsa


Gerçek Hayat Örnekleri:

  • Mail sistemi: Yeni kullanıcı kaydolunca hem e-posta gönder, hem log’a yaz, hem bildirim göster.

  • E-ticaret: Sipariş verildiğinde stok azalt, fatura oluştur, e-posta yolla.

  • Blog platformları: Yeni yazı eklendiğinde takipçilere bildirim gönder.



OCP ile Uyumu

Observer Pattern, Açık/Kapalı prensibini (OCP) uygular. Yeni dinleyiciler (observer) eklenebilir, ana kod değiştirilmez.


PHP ile Observer Pattern Uygulaması

(Observer Interface)


<?php
//Observer.php (Interface)
interface Observer {
public function update($data);
}



(Subject "Konu" Sınıfı)

<?php
//EventManager.php
class EventManager {
private $observers = [];

public function attach(Observer $observer) {
$this->observers[] = $observer;
}

public function notify($data) {
foreach ($this->observers as $observer) {
$observer->update($data);
}
}
}



(Observer Sınıfları)

<?php
//EmailSender.php
class EmailSender implements Observer {
public function update($data) {
echo "E-posta gönderildi: " . $data . "\n";
}
}

class Logger implements Observer {
public function update($data) {
echo "Log kaydedildi: " . $data . "\n";
}
}



(Kullanım)

<?php
//index.php
$event = new EventManager();

$email = new EmailSender();
$log = new Logger();

$event->attach($email);
$event->attach($log);

// Olay tetiklendi
$event->notify("Yeni kullanıcı kaydoldu!");




(Sonuc)

E-posta gönderildi: Yeni kullanıcı kaydoldu!
Log kaydedildi: Yeni kullanıcı kaydoldu!


Avantajları

  • Kod parçaları birbiriyle sıkı bağlı değildir (loosely coupled)

  • Yeni görevler kolayca eklenebilir

  • Birden fazla işlem bir olayla tetiklenebilir



Observer Pattern sayesinde sistemdeki bir değişiklikten haberdar olması gereken tüm yapılar bağımsız ve dinamik şekilde güncellenebilir. Bu sayede kodun sürdürülebilirliği ve esnekliği artar.





Related Posts

Observer Pattern: Olaylara Tepki Veren Esnek Yapı
4/ 5
Oleh