• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python程序中的观察者模式结构编写示例

Python程序中的观察者模式结构编写示例

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python观察者模式,观察者模式,我的世界观察者模式,观察者模式java,android 观察者模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

察者模式定义
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
设计原则
为了交互对象之间的松耦合设计而努力。松耦合的设计之所以能让我们建立有弹性的系统,能够应对变化,是因为对象之间的互相依赖降到了最低。

模式结构与说明

201652793847941.png (528×276)

1.Subject:主题(目标)接口,主题可以注册、移除对其感兴趣的观察者,在自身数据发生变化的时候,还可以通知这些观察者。一个主题可以有多个观察者,需要注意的是,观察者的顺序应当是无关紧要的。主题也被称为“被观察者”(Observable)
2.所有的观察者必须实现Observer接口,以便主题状态发生变化时,可以被通知
观察者模式是一种广泛使用、非常重要的设计模式,它有利于降低对象间的耦合,同时让对象保持高度协作。该模式的松耦合特性体现在:
1.关于观察者的一切,主题只知道它实现了观察者接口,其它一概不知
2.在任何时候,主题的观察者可以被动态的添加、删除
3.当新类型的观察者出现时,主题的代码不需要进行修改
4.修改主题或者观察者的任一方,对方不会受到影响

示例
通过注释就可以清晰理解~

#observer pattern 
 
class subject():
  def __init__(self,dat):
    self.listobj = list() #主题中的列表变量用来存储观察者
    self.dat = dat #主题中的数据变化时,需要通知观察者
    
  def registerObject(self,obj):
    self.listobj.append(obj) #实现订阅主题的函数
    
  def removeObject(self,obj):
    pass
  
  def notifyObservers(self):#通知各个观察者数据已经发生变化,观察者相应需要更新自己的数据
    for i in range(len(self.listobj)):
      self.listobj[i].update()
      
  def setdat(self,new_dat):#设置数据
    if self.dat != new_dat:
      self.dat = new_dat
      self.notifyObservers()
 
class observer():#观察者
  def __init__(self,sub): #观察者初始化时,需要订阅主题
    self.sub = sub
    self.sub.registerObject(self)
    self.number = self.sub.dat
    
  def update(self):#观察者更新
    self.number = self.sub.dat
  def display(self):
    print self.number
    
if __name__ =="__main__":
  su = subject(10)
  ob1 = observer(su)
  ob1.display()
  ob2 = observer(su)
  ob2.display()
  su.setdat(11)
  ob1.display()
  ob2.display()
</div>

   

</div>

您可能想查找下面的文章:

  • Python程序中的观察者模式结构编写示例
  • 详解Python设计模式编程中观察者模式与策略模式的运用
  • 举例讲解Python设计模式编程中的访问者与观察者模式
  • Python设计模式之观察者模式实例
  • Python设计模式之观察者模式实例

相关文章

  • Pycharm学习教程(2) 代码风格
  • Python中模块与包有相同名字的处理方法
  • Windows系统配置python脚本开机启动的3种方法分享
  • python使用递归解决全排列数字示例
  • python实现可以断点续传和并发的ftp程序
  • Python urllib、urllib2、httplib抓取网页代码实例
  • python实现将内容分行输出
  • 介绍Python中几个常用的类方法
  • Python内置数据类型详解
  • Django Highcharts制作图表

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python使用Redis实现作业调度系统(超简单)
    • 通过实例解析python描述符原理作用
    • Python的Bottle框架中返回静态文件和JSON对象的方法
    • python self,cls,decorator的理解
    • Flask框架的学习指南之开发环境搭建
    • Python多线程编程(三):threading.Thread类的重要函数和方法
    • python基础教程之python消息摘要算法使用示例
    • Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
    • 深入理解python对json的操作总结
    • python基础教程之面向对象的一些概念

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有