Python设计模式(十七)【观察者模式】
来源:互联网 发布:linux 挂载u盘 fat32 编辑:程序博客网 时间:2024/05/13 23:28
勇敢,世界就会让步。如果有时候你被它打败了,不断地勇敢再勇敢,它就会屈服。
"""观察者模式"""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)#用法示例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('十六进制查看器: 主题 %s 有数据 0x%x' % (subject.name, subject.data))class DecimalViewer: def update(self, subject): print('十进制查看器: 主题 %s 有数据 %d' % (subject.name, subject.data))# 用法示例...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("设置数据1变量 = 10") data1.data = 10 print("设置数据2变量 = 15") data2.data = 15 print("设置数据1变量 = 3") data1.data = 3 print("设置数据2变量 = 5") data2.data = 5 print("从data1和data2分离HexViewer。") data1.detach(view2) data2.detach(view2) print("设置数据1变量 = 10") data1.data = 10 print("设置数据2变量 = 15") data2.data = 15if __name__ == '__main__': main()
结果如图:
0 0
- Python设计模式(十七)【观察者模式】
- 设计模式学习(十七):观察者模式
- Python设计模式-观察者模式
- python设计模式(观察者模式)
- 小话设计模式(十七)观察者模式
- (十七)Java设计模式之观察者模式
- 设计模式:观察者模式(Python)
- python设计模式实现 -- 观察者模式
- 设计模式-观察者模式-observer-python
- python设计模式之观察者模式
- python设计模式之观察者模式
- C++设计模式之十七--Observer观察者模型
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- PHP命名空间(Namespace)的使用详解副本
- 纯css实现轮播效果
- Python模块之pickle
- C语言第一章
- Apache Commons
- Python设计模式(十七)【观察者模式】
- C++中的RTTI
- 简单选择排序
- 这些自媒体平台可以帮你实现大目标
- Linux基本操作命令
- C语言实现链表节点的插入和删除
- 关于bean不能被创建的问题
- Python的traceback
- leetcode:数学:Power of Two(231)