from abc import ABCMeta, abstractmethod
class Observer(metaclass=ABCMeta):
"""
观察者基类
"""
@abstractmethod
def update(self, obAble):
pass
class Observable:
"""
被观察者基类
"""
def __init__(self):
self.__obL = []
def addObserver(self, ob):
self.__obL.append(ob)
def delObserver(self, ob):
self.__obL.remove(ob)
def notif(self):
for i in self.__obL:
i.update(self)
class WaterHeater(Observable):
"""
热水器 (被观察者)
"""
def __init__(self):
super().__init__()
self.__tem = 25
def getTemp(self):
return self.__tem
def setTemp(self, tt):
self.__tem = tt
self.notif()
class Wash(Observer):
"""
洗澡模式 (观察者)
"""
def update(self, obAble):
if isinstance(obAble,WaterHeater) and \
obAble.getTemp() >= 42:
print("可洗澡")
w = WaterHeater()
ob = Wash()
w.addObserver(ob)
w.setTemp(60)
设计模式之观察者模式(python3)
于 2024-04-13 10:32:15 首次发布