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ş verir
PriceTicker Display və Alert-ə Observer protokolu vasitəsilə bildiriş verir

Subyekt 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.

python
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)
text
display: 101
display: 110
ALERT: above 105

Push yoxsa pull