定义
定义对象间一种一对多的关系,以便于当一种对象的状态变化后,所有依赖它的对象都能都得到自动更新
一个例子
现有一个数据,多个界面作为数据的观察者,当数据变化后,界面能自动得到通知
通知机制(核心)
class IObserver {
public:
virtual void update(int value) = 0;
};
数据类
class Data {
private:
int m_value;
std::list<IObserver*> m_observerList;
public:
void addObserver(IObserver *observer) {
m_observerList.push_back(observer);
}
void removeObserver(IObserver *observer) {
m_observerList.remove(observer);
}
void Notifer() {
for (auto it : m_observerList) {
it->update(m_value);
}
}
};
界面类
部件和进度条作为两个观察者
class progressBar:public IObserver {
protected:
virtual void update(int value) {
//...
}
};
class widget:public IObserver {
protected:
virtual void update(int value) {
//...
}
};
class mainWindow {
private:
Data *m_data;
progressBar *m_progressBar;
widget *m_widget;
public:
void addObserver(){
m_data->addObserver((IObserver*)m_progressBar);
m_data->addObserver((IObserver*)m_widget);
}
void removeObserver() {
m_data->removeObserver((IObserver*)m_progressBar);
m_data->removeObserver((IObserver*)m_widget);
}
};
QT信号与槽
Qt的信号与槽完美的实现了观察者模式