Python_觀察者模式

觀察者模式 又叫發佈-訂閱模式
定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽一個主題對象。當這個主題對象的狀態發生變化時通知所有的觀察者對象,讓他們自動更新自己的狀態。

俗話說,“螞蟻搬家蛇過道,明日必有大雨到”。現在我們反過來,大雨將要來歷的時候,螞蟻開始搬家,蛇出來遛彎。

定義一個基類,Animal

class Animal:
    def update(self):
        self.do_something(self)

    def do_something(self):
        pass

螞蟻類和蛇類分別去繼承Animall類和實現方法

class Ant(Animal):
    def do_something(self):
        print("螞蟻開始搬家")


class Snake(Animal):
    def do_something(self):
        print("蛇出洞遛彎")

雨類

class Rain:
    observer_list = []
    state = 1

    def register_observer(self, animal):
        # 註冊觀察者
        self.observer_list.append(animal)

    def notify_all_observers(self):
        # 通知所有觀察者更新自己的狀態
        for observer in self.observer_list:
            observer.update(observer)

    def do_something(self):
        # state 爲0 表示要下雨了,爲1表示晴天
        if self.state == 0:
            print("馬上要下大雨了")
            self.notify_all_observers()
        else:
            print("晴天")

測試代碼

rain = Rain()
# 註冊觀察者Ant
rain.register_observer(Ant)
# 註冊觀察者Snake
rain.register_observer(Snake)

rain.do_something()

rain.state = 0
rain.do_something()
發佈了116 篇原創文章 · 獲贊 19 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章