Observer pattern-i "birdən çoxa" asılılığı müəyyən edir: subyekt dəyişəndə onun bütün müşahidəçilərinə avtomatik bildiriş verilir. Subyekt yalnız kiçik müşahidəçi interfeysini bilir, ona görə reaksiyaları (tablo, xəbərdarlıq, jurnal) onu dəyişmədən icra zamanı əlavə etmək və çıxarmaq olar.
PriceTicker Display və Alert-ə Observer protokolu vasitəsilə bildiriş verirSubyekt və müşahidəçilər
Subyektin üç vəzifəsi var: subscribe, unsubscribe və notify. Burada PriceTicker hər set_price-dan sonra bildiriş verir. Display hər qiyməti, Alert yalnız limitdən yüksək olanları çap edir.
class PriceTicker:
def __init__(self):
self._observers = []
self.price = 100
def subscribe(self, obs):
self._observers.append(obs)
def unsubscribe(self, obs):
self._observers.remove(obs)
def set_price(self, price):
self.price = price
for obs in list(self._observers): # a copy: observers may unsubscribe
obs.update(self) # pull style: pass the subject
class Display:
def update(self, ticker):
print("display:", ticker.price)
class Alert:
def __init__(self, limit):
self.limit = limit
def update(self, ticker):
if ticker.price > self.limit:
print("ALERT: above", self.limit)
ticker = PriceTicker()
ticker.subscribe(Display())
ticker.subscribe(Alert(105))
ticker.set_price(101)
ticker.set_price(110)display: 101
display: 110
ALERT: above 105