Python 設計模式之觀察者模式

2021-09-28 17:03:20 字數 3430 閱讀 4086

#觀察者模式之西遊記師徒四人

#被觀察者

class imaster(object):

def __init__(self):

self._prentice_list =

def name(self):

raise notimplementederror

#收徒def add_prentice(self, prentice):

if isinstance(prentice, type(iprentice())):

print(self.name(),'has a new prentice:',prentice.name())

prentice.set_master(self)

print()

else:

raise typeerror

#棄徒def remove_prentice(self, prentice):

if isinstance(prentice, type(iprentice())):

print('remove prentices :', prentice.name(), '\n')

self._prentice_list.remove(prentice)

else:

raise typeerror

#展示徒弟資訊

def show_prentices(self):

if len(self._prentice_list) != 0:

print('prentices name list:')

for index, prentices in enumerate(self._prentice_list):

print(index+1, prentices.name())

else:

print('no prentices')

#給徒弟下命令

def order(self):

if len(self._prentice_list) != 0:

for index, prentices in enumerate(self._prentice_list):

prentices.listen(self._state)

else:

print('no prentices')

def set_state(self):

raise notimplementederror

def get_state(self):

print("now state is", self._state,'\n')

class tangsanzang(imaster):

def __init__(self):

super().__init__()

self._state = "rest"

def name(self):

return "tangsanzang"

#更改自己的狀態並給徒弟下命令

def set_state(self):

while true:

state = input('go(0) or rest(1) ?\n')

if state == "0" or state == "go":

self._state = 'go'

break

elif state == "1" or state == "rest":

self._state = 'rest'

break

self.order()

#觀察者

class iprentice(object):

def name(self):

raise notimplementederror

#拜師def set_master(self, master):

self._master = master

#聽師傅說話

def listen(self, state):

raise notimplementederror

class sunwukong(iprentice):

def __init__(self):

self._state = "rest"

def name(self):

return "sunwukong"

def listen(self, state):

if state == "go":

self._state = "vanquish demons and monsters"

print(self.name(), self._state)

if state == "rest":

self._state = "rest"

print(self.name(), self._state)

class zhubajie(iprentice):

def __init__(self):

self._state = "rest"

def name(self):

return "zhubajie"

def listen(self, state):

if state == "go":

self._state = "go"

print(self.name(), self._state)

if state == "rest":

self._state = "eat something"

print(self.name(), self._state)

class shawujing(iprentice):

def __init__(self):

self._state = "rest"

def name(self):

return "shawujing"

def listen(self, state):

if state == "go":

self._state = "go"

print(self.name(), self._state)

if state == "rest":

self._state = "rest"

print(self.name(), self._state)

def main():

tang = tangsanzang()

sun = sunwukong()

zhu = zhubajie()

sha = shawujing()

tang.add_prentice(sun)

tang.add_prentice(zhu)

tang.add_prentice(sha)

tang.get_state()

tang.set_state()

if __name__ == "__main__":

main()

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

python 設計模式之觀察者模式

在現實世界中,許多物件並不是獨立存在的,其中乙個物件的行為發生改變可能會導致乙個或者多個其他物件的行為也發生改變。例如,某種商品的物價 時會導致部分商家高興,而消費者傷心 這樣的例子還有很多,例如小偷與警察,貓和老鼠等 觀察者模式就如乙個聊天室,當你需要收到聊天室的訊息時,你就註冊成為聊天室的成員,...

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...