zoukankan      html  css  js  c++  java
  • 观察者模式的python实现

    什么会观察者模式?观察者模式就是订阅-推送模式。是为了解耦合才会被利用起来的设计模式。

    经典的就是boss 前台和员工之间的故事。一天A员工在看电影,B员工在看动漫,但是两人担心boss来了,自己没及时关掉页面,被老板发现,就委托前台的小姐姐如果老板来了通知一下他们。

    对于A和B来说就出于观察者的位置,前台小姐姐就出于统治者的位置。

    分析一下:前台小姐姐需要有两个属性:老板的状态和需要通知的员工列表

    class  basenotify():
        def __init__(self):
            self.t_list = []
            self.status = ''
        def myappend(self,observer):
            pass
        def update(self):
            pass
    
    class sister(basenotify):
        def __init__():
            basenotify.__init__(self)
            pass
        def myappend(observer):
            self.t_list.append(observer)
        def notify():
            for v in self.t_list:
                v.update()

    员工可以没有属性,但是可以有多个员工

    class baseobserver():
        def __init__(self,name,sex):
            self.name = name
            self.sex = sex
            pass
        def update(self):
            pass
    
    class Aobserver(baseobserver):
        def __init__(self,name,sex):
            baseobservise.__init__(name,sex)
            pass
    
        def update(self):
            print '11111111111111'
    
    class Bobserver(baseobserver):
        def __init__(self,name,sex):
            baseobservise.__init__(name,sex)
            pass
    
        def update(self):
            print '22222222222222'

    如何调用:

    if __name__=="__main__":
        mysister = sister()
        a= Aobservise()
        b= Bobservise()
        mysister.append(a)
        mysister.append(b)
        mysister.status ='i am comming'
        mysister.notify()
    作者:first_semon
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题,欢迎交流
  • 相关阅读:
    UVa 531 Compromise
    UVa 10130 SuperSale
    UVa 624 CD
    2015年第一天有感
    Bootstrap3.0学习(一)
    IIS上.net注册
    11g Oracle导出表 默认不导出数据为空的表解决
    Oracle数据库密码重置、导入导出库命令
    每天进步一点--WCF学习笔记
    C#每天进步一点--异步编程模式
  • 原文地址:https://www.cnblogs.com/first-semon/p/9118978.html
Copyright © 2011-2022 走看看