TypeScript’te Observer Design Pattern, nesnelere abonelik sistemi oluşturmanıza olanak tanır. Bu, abonelerin belirli bir nesnenin değiştiğini fark edebilmelerine ve bu değişikliğe uygun şekilde hareket edebilmelerine olanak tanır. Aşağıdaki örnekte, bir Subject sınıfı ve bir Observer arayüzü gösterilmektedir:
interface Observer { update(data: any): void; } class Subject { private observers: Observer[] = []; subscribe(observer: Observer) { this.observers.push(observer); } unsubscribe(observer: Observer) { this.observers = this.observers.filter(o => o !== observer); } notify(data: any) { this.observers.forEach(observer => observer.update(data)); } }
Bu sınıf ve arayüz, abonelik sistemi oluşturmanıza olanak tanır. Örneğin, bir Temperature sınıfı oluşturabilirsiniz ve Subject sınıfından türetin:
class Temperature extends Subject { private temperature: number; setTemperature(temperature: number) { this.temperature = temperature; this.notify(temperature); } }
Son olarak, bir veya daha fazla Observer uygulayabilirsiniz:
class TemperatureDisplay implements Observer { update(data: any) { console.log(`Temperature: ${data}°C`); } } class Heater implements Observer { update(data: any) { if (data < 20) { console.log('Heater is on'); } else { console.log('Heater is off'); } } }
Bu örnekte, Temperature sınıfı Subject olarak ve TemperatureDisplay ve Heater sınıfları Observer olarak tanımlanmıştır. Temperature sınıfı, sıcaklığı değiştirdiğinde abonelerine bildirir ve aboneler, update yöntemi aracılığıyla bu değişikliğe uygun şekilde hareket eder.