zoukankan      html  css  js  c++  java
  • Python 设计模式

    1、观察者模式

    class AbstractSubject:
        def register(self, listener):
            raise NotImplementedError("Must subclass me")
     
        def unregister(self, listener):
            raise NotImplementedError("Must subclass me")
     
        def notify_listeners(self, event):
            raise NotImplementedError("Must subclass me")
     
    class Listener:
        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 unregister(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
    

    Python Observer Pattern

    因为Python版本是3.3,所以用print()和 input(),替换 print和raw_input。

  • 相关阅读:
    Linux基础篇之软件源码包安装
    11-1 网络协议和管理
    bash-2 httpd服务的源码编译安装脚本
    8-1 文本三级剑客之sed
    9-3 磁盘存储与分区
    9-2 yum,dnf和apt
    9-1 软件包管理
    bash-1 初始化CentOS系统的初始化脚本
    3-3 man手册介绍
    5-3 文件权限
  • 原文地址:https://www.cnblogs.com/xuanyuanchen/p/6344380.html
Copyright © 2011-2022 走看看