一个观察器的例子:(visual studio 编译运行)
观察器(观察者)模式:被观察者调用观察器的回调函数。
symbian中大量使用观察器。
在symbian中观察器都是M类(一个接口)。如MCoeControlObserver。使用如下:
//实现观察器
class CControObserver: public CCoeControl,public MCoeControlObserver
{
...........
public://from MCoeControlObserver
void HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType);
}
void CControObserver::HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType)
{
...........................
}
//设置observer为button的观察器,其中button为CAKnButton*型,observer为CControObserver*型
.................................
..................................
button = CAknButton::NewL( reader );
observer = CControObserver::NewL( );
button->SetObserver( observer );
.................................
..................................
操作button,即可对控件observer进行控制。
button是被观察者subject,操作button时,会执行其基类的某个函数(为上例中的Function函数),在该函数中调用其观察器的回调函数CControObserver::HandleControlEventL(为上例中的Callback函数)。