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

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

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

代码结构

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,378评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,355评论 19 139
  • 1 场景问题# 1.1 订阅报纸的过程## 来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程...
    七寸知架构阅读 10,125评论 5 57
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,335评论 3 14
  • 本文的结构如下: 什么是观察者模式 为什么要用该模式 模式的结构 代码示例 推模型和拉模型 优点和缺点 适用环境 ...
    w1992wishes阅读 5,269评论 0 16