设计模式之观察者模式的Python实现案例

2025-11-09 01:44:31

1、打开Python开发工具IDLE,新建‘observer.py’文件,先假设一个简单的应用场景,把上课状态及时通知给学生和老师。先创建一个观察者父类。代码如下:

class observe:

    def update(self,skzt):

        pass

    def display(self):

        pass

设计模式之观察者模式的Python实现案例

2、创建observe父类的两个子类,student和teacher,并实现父类的update和

dispaly方法,代码如下;

class student(observe):

    def __init__(self,name):

        self.name = name

    def update(self,skzt):

        self.skzt=skzt

        self.display()

    def display(self):

        print('学生:%s 知道了%s' %(self.name,self.skzt))

    

class teacher(observe):

    def __init__(self,name):

        self.name = name

    def update(self,skzt):

        self.skzt=skzt

        self.display()

    def display(self):

        print('老师:%s 知道了%s' %(self.name,self.skzt))

设计模式之观察者模式的Python实现案例

3、创建主题父类,有三个方法,注册观察者,移除观察者和通知观察者,代码如下:

class subject:

    def registerObj(self,obj):

        pass

    def removeObj(self,obj):

        pass

    def notifyObj(self):

        pass

设计模式之观察者模式的Python实现案例

4、创建子类skl(上课啦),继承自主题类,在子类实现父类的注册观察者,移除观察者和通知观察者方法,同时创建设置上课状态方法,代码如下:

class skl(subject):

    def __init__(self):

        self.observers = []

        self.skzt = ''

        return

    def registerObj(self,obj):

        self.observers.append(obj)

    def removeObj(self,obj):

        self.observers.remove(obj)

    def setSkzt(self,skzt):

        self.skzt = skzt

    def notifyObj(self):

        for item in self.observers:

            item.update(self.skzt)

        return

设计模式之观察者模式的Python实现案例

5、在程序入口,创建一个skl类的对象,和学生类及教师类的对象。改变上课状态并写测试注册通知的代码,如下:

s1=skl()

s1.setSkzt('上课')

stu1 = student('张三')

s1.registerObj(stu1)

tec1 = teacher('王老师')

s1.registerObj(tec1)

s1.notifyObj()

设计模式之观察者模式的Python实现案例

6、F5运行程序,成功把上课状态通知到了学生和老师

设计模式之观察者模式的Python实现案例

7、测试移除观察者代码,仅需增加一行,代码如下:

s1.removeObj(stu1)

设计模式之观察者模式的Python实现案例

8、F5运行程序,仅把上课状态通知到了老师

设计模式之观察者模式的Python实现案例

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢