Python_观察者模式

观察者模式 又叫发布-订阅模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。当这个主题对象的状态发生变化时通知所有的观察者对象,让他们自动更新自己的状态。

俗话说,“蚂蚁搬家蛇过道,明日必有大雨到”。现在我们反过来,大雨将要来历的时候,蚂蚁开始搬家,蛇出来遛弯。

定义一个基类,Animal

class Animal:
    def update(self):
        self.do_something(self)

    def do_something(self):
        pass

蚂蚁类和蛇类分别去继承Animall类和实现方法

class Ant(Animal):
    def do_something(self):
        print("蚂蚁开始搬家")


class Snake(Animal):
    def do_something(self):
        print("蛇出洞遛弯")

雨类

class Rain:
    observer_list = []
    state = 1

    def register_observer(self, animal):
        # 注册观察者
        self.observer_list.append(animal)

    def notify_all_observers(self):
        # 通知所有观察者更新自己的状态
        for observer in self.observer_list:
            observer.update(observer)

    def do_something(self):
        # state 为0 表示要下雨了,为1表示晴天
        if self.state == 0:
            print("马上要下大雨了")
            self.notify_all_observers()
        else:
            print("晴天")

测试代码

rain = Rain()
# 注册观察者Ant
rain.register_observer(Ant)
# 注册观察者Snake
rain.register_observer(Snake)

rain.do_something()

rain.state = 0
rain.do_something()

版权声明:本文为longyanbuhui原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。