The following code is an implementation of Observer design pattern
Code:
#include<iostream>
#include<vector>
using namespace std;
class Subject{
vector<class Observer*> views;
int value;
public:
void attach(Observer *obs)
{
views.push_back(obs);
}
void setValue(int val)
{
value=val;
notify();
}
int getValue()
{
return value;
}
void notify();
};
void Subject::notify()
{
for(int i=0;i<views.size();i++)
{
views[i]->update();
}
}
class Observer{
Subject *model;
int denom;
public:
Observer(Subject *sub,int d):model(sub),denom(d)
{
model->attach(this);
}
virtual void update()=0;
protected:
Subject *getSubject()
{
return model;
}
int getDivisor()
{
return denom;
}
};
class DivObserver: public Observer{
public:
DivObserver(Subject *sub,int d):Observer(sub,d)
{
}
void update()
{
int v=getSubject()->getValue(),d=getDivisor();
cout << v << " div " << d << " is " << v / d << '\n';
}
};
class ModObserver: public Observer{
public:
ModObserver(Subject *sub,int d):Observer(sub,d)
{
}
void update()
{
int v=getSubject()->getValue(),d=getDivisor();
cout << v << " mod " << d << " is " << v % d << '\n';
}
};
int main()
{
Subject sub;
DivObserver d1(&sub,4);
DivObserver d2(&sub,3);
ModObserver m1(&sub,4);
sub.setValue(14);
cin.get();
return 0;
}
But Im getting the following error
error C2027: use of undefined type 'Observer'