zoukankan      html  css  js  c++  java
  • 【转】观察者模式

    Python2代码示例:

    class AbstractSubject(object):
        def register(self, listener):
            raise NotImplementedError("Must subclass me")
     
        def deregister(self, listener):
            raise NotImplementedError("Must subclass me")
     
        def notify_listeners(self, event):
            raise NotImplementedError("Must subclass me")
     
    class Listener(object):
        def __init__(self, name, subject):
            self.name = name
            subject.register(self)
     
        def notify(self, event):
            print self.name, "received event", event
     
    class Subject(AbstractSubject):
        def __init__(self):
            self.listeners = []
            self.data = None
    
        def getUserAction(self):
            self.data = raw_input('Enter something to do:')
            return self.data
    
        # Implement abstract Class AbstractSubject
    
        def register(self, listener):
            self.listeners.append(listener)
     
        def deregister(self, listener):
            self.listeners.remove(listener)
     
        def notify_listeners(self, event):
            for listener in self.listeners:
                listener.notify(event)
    
     
    if __name__=="__main__":
        # make a subject object to spy on
        subject = Subject()
     
        # register two listeners to monitor it.
        listenerA = Listener("<listener A>", subject)
        listenerB = Listener("<listener B>", subject)
     
        # simulated event
        subject.notify_listeners ("<event 1>")
        # outputs:
        #     <listener A> received event <event 1>
        #     <listener B> received event <event 1>
     
        action = subject.getUserAction()
        subject.notify_listeners(action)
        #Enter something to do:hello
        # outputs:
        #     <listener A> received event hello
        #     <listener B> received event hello
    

    来源:维基百科

  • 相关阅读:
    网络传输协议 UDP & TCP 详解
    OSI 七层协议
    (01day)python接口测试
    Python2和Python3的区别,以及为什么选Python3的原因
    JAVA反编译工具
    JAR反编译工具
    webdriver19-witchto方法
    webdriver实例14-Xpath定位的几种方法
    webdirver实例1--查找元素
    Qt插件开发
  • 原文地址:https://www.cnblogs.com/forzhaokang/p/5291842.html
Copyright © 2011-2022 走看看