设计模式-观察者模式
已于 2025年02月25日 10:26 修改
访问次数:12
观察者模式
一、概念
定义对象之间的一对多关系,当一个对象(状态机)发生变化时,其他所有对象(状态机)都会收到通知,并且自动更新。观察者模式也称为“发布-订阅”模式
二、角色
- 抽象主题(Subject-被观察者):它是状态变化的源头,维护一个“观察者列表”,状态变化时通知所有注册的观察者。
- 具体主题 (ConcreteSubject):是被观察者的具体实现,它保存状态并在状态改变时通知观察者。
- 抽象观察者 (Observer):观察者接口,所有的具体观察者都实现该接口。当主题的状态发生变化时,观察者会收到通知并执行相应的操作。
- 具体观察者 (ConcreteObserver):实现了观察者接口,接收被观察者发出的通知,并根据被观察者的状态作出相应的反应。
三、UML

三、具体实现
# Author: Tongqing
# Date Created: 2025/2/24
'''
Description:
'''
import abc
import mmap
import os
# 定义观察者接口
class ObserverInterface(abc.ABC):
@abc.abstractmethod
def update(self):
pass
# 定义subject-主题接口
class SubjectInterface(abc.ABC):
@abc.abstractmethod
def addObserver(self, observer):
pass
@abc.abstractmethod
def removeObserver(self, observer):
pass
@abc.abstractmethod
def notify(self):
pass
# 定义具体主题
class CreateSubject(SubjectInterface):
def __init__(self):
self.observers = []
def addObserver(self, observer: ObserverInterface):
self.observers.append(observer)
def removeObserver(self, observer: ObserverInterface):
self.observers.remove(observer)
def notify(self):
for observer in self.observers:
observer.update(self)
# 定义具体observer
class CreateObserver(ObserverInterface):
def update(self, subject: SubjectInterface):
print(f"observer: {self} get update observer from subject: {subject}")
def main():
subject1 = CreateSubject()
observer1 = CreateObserver()
subject1.addObserver(observer1)
subject1.notify()
if __name__ == '__main__':
main()
评论(0)