Observer(Subject *mod, int div) { model = mod; denom = div; // 4. Observers register themselves with the Subject model->attach(this); }
static int tolua_CCGUI_Subject_attach00(lua_State* tolua_S) { #ifndef TOLUA_RELEASE tolua_Error tolua_err; if ( !tolua_isusertype(tolua_S,1,"Subject",0,&tolua_err) || (tolua_isvaluenil(tolua_S,2,&tolua_err) || !tolua_isusertype(tolua_S,2,"LUA_FUNCTION",0,&tolua_err)) || !tolua_isnoobj(tolua_S,3,&tolua_err) ) goto tolua_lerror; else #endif { Subject* self = (Subject*) tolua_tousertype(tolua_S,1,0); LUA_FUNCTION handler = *((LUA_FUNCTION*) tolua_tousertype(tolua_S,2,0)); #ifndef TOLUA_RELEASE if (!self) tolua_error(tolua_S,"invalid 'self' in function 'attach'", NULL); #endif { self->attach(handler); } } return 0; #ifndef TOLUA_RELEASE tolua_lerror: tolua_error(tolua_S,"#ferror in function 'attach'.",&tolua_err); return 0; #endif }
void clientObserver() { cout << "Observer\n"; Subject* subject = new Subject; Observer* dp[] = { new Observer1, new Observer2, new Observer3}; for(size_t i=0; i<COUNT(dp); i++) { subject->attach(dp[i]); dp[i]->link(subject); } subject->notify(); cout << endl; }
int main() { ObserverB ob; ObserverA oa; Subject sub; sub.attach(&ob); sub.attach(&oa); //Notify All sub.NotifyAll(); //detach ObserverA sub.detach(&oa); //Notify All sub.NotifyAll(); return 0; }
int main(int argc, char *argv[]) { Subject * subject = new ConcreteSubject(); Obeserver * objA = new ConcreteObeserver("A"); Obeserver * objB = new ConcreteObeserver("B"); subject->attach(objA); subject->attach(objB); subject->setState(1); subject->notify(); cout << "--------------------" << endl; subject->detach(objB); subject->setState(2); subject->notify(); delete subject; delete objA; delete objB; return 0; }
Observer(Subject* mod, int div){ model = mod; denom = div; model->attach(this); }