定义:对象间的一对多关系,当一个对象状态发生改变的时候,其它依赖于它的对象都会得到广播通知并进行自定义动作,通过面向对象技术的多态技术,可以降低这种依赖关系,降低耦合度。包含订阅者、观察者两种角色。
注:Qt中的信号槽机制就是应用的观察者模式
代码:
class ObserverBase
{
public:
ObserverBase() {}
virtual ~ObserverBase() {}
virtual void Update(){}
};
class ObserverOneChild : public ObserverBase
{
void Update()override
{
std::cout<<"notify ObserverOneChild"<<std::endl;
}
};
class ObserverTwoChild : public ObserverBase
{
void Update() override
{
std::cout << "notify ObserverTwoChild" << std::endl;
}
};
class NotifyBase
{
public:
void Add(ObserverBase *ob)
{
observers.emplace_back(ob);
};
void Remove(ObserverBase *ob)
{
observers.remove(ob);
}
void Notify()
{
for (auto &observer : observers)
{
observer->Update();
}
}
private:
std::list<ObserverBase *> observers;
};
int main()
{
ObserverBase *base1 = new ObserverOneChild();
ObserverBase *base2 = new ObserverTwoChild();
NotifyBase notify;
notify.Add(base2);
notify.Add(base1);
notify.Notify();
notify.Remove(base1);
notify.Notify();
delete base2;
delete base1;
return 0;
}