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:
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);
}
<?phpclass EventManager {//EventManager.php
private $observers = [];
public function attach(Observer $observer) {
$this->observers[] = $observer;
}
public function notify($data) {
foreach ($this->observers as $observer) {
$observer->update($data);
}
}
}
<?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";
}
}
<?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!");
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