Some questions from a n00b
Given this code:
#include <iostream>
#include <set>
using namespace std;
// ---------------- Observer interface -----------------
class Observer {
public:
virtual void Notify() = 0;
};
// ---------------- Observable object -------------------
class Observable {
static Observable* instance;
set<Observer*> observers;
Observable() { };
public:
static Observable* GetInstance();
void AddObserver(Observer& o);
void RemoveObserver(Observer& o);
void NotifyObservers();
void Trigger();
};
Observable* Observable::instance = NULL;
Observable* Observable::GetInstance()
{
if (instance == NULL) {
instance = new Observable();
}
return instance;
}
void Observable::AddObserver(Observer& o)
{
observers.insert(&o);
}
void Observable::RemoveObserver(Observer& o)
{
observers.erase(&o);
}
void Observable::NotifyObservers()
{
set<Observer*>::iterator itr;
for (itr = observers.begin();
itr != observers.end(); itr++)
(*itr)->Notify();
}
// TEST METHOD TO TRIGGER
// IN THE REAL SCENARIO THIS IS NOT REQUIRED
void Observable::Trigger()
{
NotifyObservers();
}
// ------ Concrete class interested in notifications ---
class MyClass : public Observer {
Observable* observable;
public:
MyClass() {
observable = Observable::GetInstance();
observable->AddObserver(*this);
}
~MyClass() {
observable->RemoveObserver(*this);
}
void Notify() {
cout << "Received a change event" << endl;
}
};
void main()
{
Observable* observable = Observable::GetInstance();
MyClass* obj = new MyClass();
observable->Trigger();
}
What if I don't to use a SET? What is the advantage of using pointers
with "new", as apposed to NOT using pointers?