• 观察者模式


    最近考试有考过几次,便仔细瞧瞧了这是何物。

    我理解其中核心的点就在于,当一个观察者观察到发生了改变,不仅他自身要进行更新,其余所有的观察者都将被通知到并进行更新。

    代码实现如下:

    from abc import ABCMeta, abstractmethod
    
    
    class Subject(object):
        def __init__(self):
            self.observers = []
            self._state = ""
    
        @property
        def state(self):
            return self._state
    
        @state.setter
        def state(self, value):
            self._state = value
            self.notify_all()
    
        def add_observers(self, observer):
            self.observers.append(observer)
    
    
        def notify_all(self):
            for observer in self.observers:
                observer.update(self.state)
    
    
    
    class Observer(metaclass=ABCMeta):
    
        def __init__(self, subject):
            subject.add_observers(self)
    
    
        @abstractmethod
        def update(self, state):
            """all observers must implement this function to become a observer"""
    
    
    
    class RainObserver(Observer):
        def __init__(self, subject):
            super().__init__(subject)
    
        def update(self, state):
            print(self.__class__.__name__, "had updated! now state: ", state)
    
    
    class SunObserver(Observer):
        def __init__(self, subject):
            super().__init__(subject)
    
        def update(self, state):
            print(self.__class__.__name__, "had updated! now state: ", state)
    
    
    if __name__ == '__main__':
        tmp_subject = Subject()
    
        RainObserver(tmp_subject)
        SunObserver(tmp_subject)
    
        tmp_subject.state = "Rain"
    
        

    输出:

    RainObserver had updated! now state:  Rain
    SunObserver had updated! now state:  Rain
  • 相关阅读:
    跟我学Windows Azure 一 创建Windows Azure试用账号
    Dynamic编程
    多线程下的资源同步访问
    避免在同一机器上同时运行同一应用程序的多个实例
    依赖注入与Service Locator
    MVP演化论
    应用MVP模式对遗留代码进行重构
    对遗留代码的解依赖技术
    单元测试之测试方法
    单元测试之Mock
  • 原文地址:https://www.cnblogs.com/xu-xiaofeng/p/13636501.html
Copyright © 2020-2023  润新知