【行为型】观察者模式

Posted by Liao on 2023-01-12

一、定义

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。

二、结构

  • 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者(通过add/remove),从而使二者之间的依赖关系达致松耦合。
  • 目标发送通知时,无需指定观察者,通知会自动传播。
  • 观察者自己决定是否需要订阅通知,目标对象对此一无所知。
  • Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。(Java中的Listen机制)

分割大文件,需要一个进度条展示分割进度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include "FileSplitter.hpp"
using namespace std;

class FileSpliter {
string m_filePath;
int m_fileNumber;

ProgressBar * m_progressBar; // 产生了编译时依赖 实现细节 通知

public:
FileSpliter(const &string filePath, int fileNumber,ProgressBar * progressBar):
m_filePath(filePath),
m_fileNumer(fileNumber){

}

void split(){
//1、读取大文件

//2、分批次向小文件写入
float progressVal;
for(int i = 0; i < m_fileNumber; i++) {
// ...
if(progressBar != nullptr) {
progressVal =(i+1)/m_fileNumber;
progressBar->setValue(progressVal); // 更新进度条
}
}
}

};