行為模式 觀察者 模式

2022-06-29 18:03:11 字數 2138 閱讀 8962

觀察者模式應用比較廣泛,又被稱為「發布-訂閱」模式。它用來定義物件間一種一對多的依賴關係,當乙個物件的狀態發生變化時,所有依賴它的物件都得到通知並被自動更新。觀察者模式的角色有:抽象主題、具體主題(發布者)、抽象觀察者和具體觀察者(訂閱者)。

from abc import

abcmeta, abstractmethod

#抽象的訂閱者

class observer(metaclass=abcmeta):

@abstractmethod

defupdata(self, notice):

""":param notice: notice類的物件

:return:

"""pass

#抽象的發布者:可以是介面,子類不需要實現,所以不需要定義抽象方法!

class

notice(object):

def__init__

(self):

self.observers =

defattach(self, obs):

defdetach(self, obs):

self.observers.remove(obs)

defnotice(self):

"""推送

:return:

"""for obs in

self.observers:

obs.updata(self)

#具體的發布者

class

staffnotice(notice):

def__init__

(self, company_info):

super().

__init__() #

呼叫父類物件宣告observers屬性

self.__company_info =company_info

@property

defcompany_info(self, ):

return self.__company_info

@company_info.setter

defcompany_info(self, info):

self.

__company_info =info

self.notice()

#具體的訂閱者

class

staff(observer):

def__init__

(self):

self.company_info =none

defupdata(self, notice):

self.company_info =notice.company_info

staff_notice = staffnotice('

初始化公司資訊')

staff1 =staff()

staff2 =staff()

staff_notice.attach(staff1)

staff_notice.attach(staff2)

#print(staff1.company_info) none

#print(staff2.company_info) none

staff_notice.company_info = '

假期放假通知!

'print

(staff1.company_info)

print

(staff2.company_info)

staff_notice.detach(staff2)

staff_notice.company_info = '

明天開會!

'print

(staff1.company_info)

print

(staff2.company_info)

"""假期放假通知!

假期放假通知!

明天開會!

假期放假通知!

"""

使用場景:當乙個抽象模型有兩個方面,其中乙個方面依賴另乙個方面。將這兩者封裝在獨立物件中以使它們可以各自獨立地改變和復用;當對乙個物件的改變需要同時改變其它物件,而不知道具體有多少物件待改變;當乙個物件必須通知其它物件,而它又不能假定其它物件是誰。換言之,你不希望這些物件是緊耦合的。優點:目標和觀察者之間的抽象耦合最小;支援廣播通訊。

行為模式(觀察者模式)

觀察者模式,也稱發布 訂閱模式,定義了乙個被觀察者和多個觀察者的 一對多的物件關係。在被觀察者狀態發生變化的時候,它的所有觀察者都會收到通知,並自動更新。觀察者模式通常用在實時事件處理系統 元件間解耦 資料庫驅動的訊息佇列系統,同時也是mvc設計模式中的重要組成部分。以下我們以訂單建立為例。當訂單建...

觀察者模式 行為

當物件間存在一對多關係時,則使用觀察者模式 observer pattern 比如,當乙個物件被修改時,則會自動通知依賴它的物件。觀察者模式屬於行為型模式。意圖 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。主要解決 乙個物件狀態改變給其他物...

行為型模式 觀察者模式

物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。subject 抽象的主題,被觀察的物件,提供 attach 和detach observer 物件的介面。concretesubject 具體的被觀察物件,維持 concretesubject 狀態...