观察者(Observer)模式也叫发布订阅(publish/subscribe)模式,是MVC(模型-视图-控制器)模式的重要组成部分。
#include <iostream>
using namespace std;
class Observer
{
public:
virtual void Update() = 0;
virtual ~Observer(){}
};
class Engine
{
public:
Engine(Observer *aObserver):_observer (aObserver)
{
}
void DownLoad()
{
cout<<"Subjcet finished!"<<endl;
_observer->Update();
}
private:
Observer *_observer;
};
class AppUI :public Observer
{
public:
AppUI()
{
_engine = new Engine(this);
}
~AppUI()
{}
void Start()
{
cout<<"The subject is called!"<<endl;
_engine->DownLoad();
}
void Update()
{
cout<<"The Observer is Called!"<<endl;
}
private:
Engine *_engine;
};
int main(int argc, const char * argv[])
{
AppUI *pUI=new AppUI;
pUI->Start();
delete pUI;
}在Cocoa Touch框架中,具体应用有两个,通知(notification)机制,KVO(key-Value-Observing)键值观察机制。通知机制于委托机制不同的是,通知是一对多的对象之间的通信,委托是一对一的对象之间的通信。