观察者模式(Python)

观察者模式:

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己 

代码实现:

班长、学习委员发现老师进教室时,负责通知睡觉、玩游戏的学生起来做好。

from abc import abstractmethod


class Informer(object):
    def __init__(self):
        self.observers = []  # 保存所有观察者对象
        self.status = ''  # 班长状态

    def attach(self, student):
        self.observers.append(student)

    def notify(self):
        for p in self.observers:
            p.update()


# 通知者(班长)
class Monitor(Informer):
    pass


# 通知者(学委)
class Studyer(Informer):
    pass


class Students(object):
    def __init__(self, name, monitor):
        self.name = name
        self.monitor = monitor  # 绑定通知者

    @abstractmethod
    def update(self):
        pass


# 观察者(睡觉的同学)
class StudentSleep(Students):

    def update(self):
        print('{},{}快醒醒,别睡了!'.format(self.monitor.status, self.name))


# 观察者(玩游戏的同学)
class StudentGame(Students):

    def update(self):
        print('{},{}快别玩游戏了!'.format(self.monitor.status, self.name))


if __name__ == '__main__':
    monitor = Monitor()
    monitor.status = '老师来了!'
    s1 = StudentSleep('李小龙', monitor)
    s2 = StudentSleep('成龙', monitor)
    monitor.attach(s1)
    monitor.attach(s2)
    monitor.notify()
    stu = Studyer()
    stu.status = '老师来了!'
    s3 = StudentGame('小赵', stu)
    s4 = StudentGame('小兰', stu)
    stu.attach(s3)
    stu.attach(s4)
    stu.notify()
'''
老师来了!,李小龙快醒醒,别睡了!
老师来了!,成龙快醒醒,别睡了!
老师来了!,小赵快别玩游戏了!
老师来了!,小兰快别玩游戏了!
'''

猜你喜欢

转载自blog.csdn.net/weixin_42223833/article/details/86651005
今日推荐