[code]
class
Observer{
public
:
virtual
void
Update(
int
) = 0;
};
class
Subject{
public
:
virtual
void
Attach(Observer *) = 0;
virtual
void
Detach(Observer *) = 0;
virtual
void
Notify() = 0;
};
class
ConcreateObserver:
public
Observer{
private
:
Subject *m_pSubject;
public
:
ConcreateObserver(Subject *pSubject): m_pSubject(pSubject){}
void
Update(
int
value){
std::cout <<
"ConcreateObserver get the update. New State: "
<< value << std::endl;
}
};
class
ConcreateObserver2:
public
Observer{
private
:
Subject *m_pSubject;
public
:
ConcreateObserver2(Subject *pSubject):m_pSubject(pSubject){}
void
Update(
int
value){
std::cout <<
"ConcreateObserver2 get the update. New State: "
<< value << std::endl;
}
};
class
ConcreateSubject:
public
Subject{
private
:
std::list<Observer *> m_ObserverList;
int
m_iState;
public
:
void
Attach(Observer *pObserver);
void
Detach(Observer *pObserver);
void
Notify();
void
setState(
int
state){
m_iState = state;
}
};
void
ConcreateSubject::Attach(Observer *pObserver){
m_ObserverList.push_back(pObserver);
}
void
ConcreateSubject::Detach(Observer *pObserver){
m_ObserverList.
remove
(pObserver);
}
void
ConcreateSubject::Notify(){
std::list<Observer *>::iterator it = m_ObserverList.begin();
while
(it != m_ObserverList.end()){
(*it)->Update(m_iState);
++it;
}
}