zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【行为模式Behavioral】观察者模式Observer

    Python转载版

    https://github.com/faif/python-patterns/blob/master/behavioral/observer.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    http://code.activestate.com/recipes/131499-observer-pattern/
    
    *TL;DR80
    Maintains a list of dependents and notifies them of any state changes.
    """
    
    from __future__ import print_function
    
    
    class Subject(object):
    
        def __init__(self):
            self._observers = []
    
        def attach(self, observer):
            if observer not in self._observers:
                self._observers.append(observer)
    
        def detach(self, observer):
            try:
                self._observers.remove(observer)
            except ValueError:
                pass
    
        def notify(self, modifier=None):
            for observer in self._observers:
                if modifier != observer:
                    observer.update(self)
    
    
    # Example usage
    class Data(Subject):
    
        def __init__(self, name=''):
            Subject.__init__(self)
            self.name = name
            self._data = 0
    
        @property
        def data(self):
            return self._data
    
        @data.setter
        def data(self, value):
            self._data = value
            self.notify()
    
    
    class HexViewer:
    
        def update(self, subject):
            print(u'HexViewer: Subject %s has data 0x%x' %
                  (subject.name, subject.data))
    
    
    class DecimalViewer:
    
        def update(self, subject):
            print(u'DecimalViewer: Subject %s has data %d' %
                  (subject.name, subject.data))
    
    
    # Example usage...
    def main():
        data1 = Data('Data 1')
        data2 = Data('Data 2')
        view1 = DecimalViewer()
        view2 = HexViewer()
        data1.attach(view1)
        data1.attach(view2)
        data2.attach(view2)
        data2.attach(view1)
    
        print(u"Setting Data 1 = 10")
        data1.data = 10
        print(u"Setting Data 2 = 15")
        data2.data = 15
        print(u"Setting Data 1 = 3")
        data1.data = 3
        print(u"Setting Data 2 = 5")
        data2.data = 5
        print(u"Detach HexViewer from data1 and data2.")
        data1.detach(view2)
        data2.detach(view2)
        print(u"Setting Data 1 = 10")
        data1.data = 10
        print(u"Setting Data 2 = 15")
        data2.data = 15
    
    
    if __name__ == '__main__':
        main()
    
    ### OUTPUT ###
    # Setting Data 1 = 10
    # DecimalViewer: Subject Data 1 has data 10
    # HexViewer: Subject Data 1 has data 0xa
    # Setting Data 2 = 15
    # HexViewer: Subject Data 2 has data 0xf
    # DecimalViewer: Subject Data 2 has data 15
    # Setting Data 1 = 3
    # DecimalViewer: Subject Data 1 has data 3
    # HexViewer: Subject Data 1 has data 0x3
    # Setting Data 2 = 5
    # HexViewer: Subject Data 2 has data 0x5
    # DecimalViewer: Subject Data 2 has data 5
    # Detach HexViewer from data1 and data2.
    # Setting Data 1 = 10
    # DecimalViewer: Subject Data 1 has data 10
    # Setting Data 2 = 15
    # DecimalViewer: Subject Data 2 has data 15
    Python转载版
  • 相关阅读:
    121-基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 机器人主板
    BJSV-P-004无缝大屏显示
    BJSV-P-003高清智能卡口系统
    BJSV-P-002高精度测速一体机
    新一代高清智能电子警察系统
    135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台
    175-基于TI DSP TMS320C6455、Xilinx V5 FPGA XC5VSX95T的高速数据处理核心板
    137-基于TMS320C6678、FPGA XC5VSX95T的四路Base模式全景影像处理平台
    134-基于TMS320C6678、FPGA XC5VSX95T的一路Full模式Camera Link图像理平台
    如何连接宏参数
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035645.html
Copyright © 2011-2022 走看看