我有一個自定義容器(「主題」),它被許多其他類所觀察。更換容器後,更改後將通知推送給所有觀察員。例如,對於調整大小,處理流程看起來參考自定義容器的C++觀察者模式
std::vector<double> vec;
void resize(size_t n)
{
vec.resize(n); //first resize
notify(Event::RESIZE); //afterwards inform observers about the resize event
}
現在,當我通過參考存取改變容器的元素,我看不出有什麼明顯的方法通知:當
double& operator[](size_t i)
{
notify(Event::CHANGE_ELEMENT); //no way to notify afterwards, so notify before
return vec[i];
}
因此我改變的元素作爲
containerObject[2] = 1.1;
觀察員得到了解的老態,這是通知後才更新。
是否有解決方法(除了使用setter方法)呢?
我相信你的自定義容器不應該提供operator [](size_t)。可能是setter(),然後在應用更改後從setter發送通知。 – Jagannath 2014-10-31 23:05:49