美文网首页Python精耕细作Python点滴
[Python设计模式] 10 - 观察者模式

[Python设计模式] 10 - 观察者模式

作者: 蓝色信仰 | 来源:发表于2015-04-05 19:31 被阅读1542次

    设计模式的目的是让代码易维护、易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的。

    观察者模式:又叫发布订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时,会通知所有观察者对象,是他们能自动更新自己。

    代码结构

    class Topic(object):
        """主题类。保存所有观察者实例的引用,每个主题都可以有很多观察者
        可以增加和删除观察者"""
        def __init__(self):
            self.obs = []
    
        def Attach(self, ob):
            self.obs.append(ob)
    
        def Detach(self, ob):
            self.obs.remove(ob)
    
        def Notify(self):
            for ob in self.obs:
                ob.Update()
    
    class Observer(object):
        """抽象观察者类,收到主题的变更通知时,更新自己"""
        def Update(self):
            raise NotImplementedError()      
    
    class ConcreteTopic(object):
        """一个具体主题"""
        def __init__(self):
            self.state = None
    
        def ChangeState(self, newState):
            self.state = newState
            self.Notify()
    
    class ConcreteObserver(object):
        """一个具体监听类"""
        def __init__(self, topic):
            self.topic = topic
    
        def Update(self):
            print self.topic.state
    
    def client():
        topic = ConcreteTopic()
        topic.Attach(ConcreteObserver(topic))
    
        topic.ChangeState('New State')
    

    众多MQ中间件都是采用这种模式的思想来实现的。

    观察者模式可以让主题和观察者之间解耦,互相之间尽可能少的依赖。不过抽象主题和抽象观察者之间还是有耦合的。

    原文地址:http://www.isware.cn/python-design-pattern/10-observer/

    相关文章

      网友评论

        本文标题:[Python设计模式] 10 - 观察者模式

        本文链接:https://www.haomeiwen.com/subject/rdoaxttx.html