40 lines
		
	
	
		
			856 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			856 B
		
	
	
	
		
			C++
		
	
	
	
	
	
 | 
						|
#include "observer.hpp"
 | 
						|
 | 
						|
void Subject::Notify()
 | 
						|
{
 | 
						|
  for (const auto &o : observerList) { o->Update(message);}
 | 
						|
}
 | 
						|
 | 
						|
void Subject::SendMessage(std::string message_)
 | 
						|
{
 | 
						|
  message = message_;
 | 
						|
  Notify();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/******************************************************************************/
 | 
						|
// Observer
 | 
						|
 | 
						|
int Observer::totalObservers = 0;
 | 
						|
 | 
						|
Observer::Observer(Subject &s) : subject(s) {
 | 
						|
  std::cout << "Observer " << ++totalObservers << " is subscribed to "
 | 
						|
            << s.getName() << "\n";
 | 
						|
  s.Attach(this);
 | 
						|
  number = totalObservers;
 | 
						|
}
 | 
						|
 | 
						|
void Observer::Update(std::string &message)
 | 
						|
{
 | 
						|
  std::cout << "Observer " << number << " has message from "
 | 
						|
            << subject.getName() << ": " << message;
 | 
						|
}
 | 
						|
 | 
						|
void Observer::Detach()
 | 
						|
{
 | 
						|
  std::cout << "Observer " << number << " has detached from "
 | 
						|
            << subject.getName() << std::endl;
 | 
						|
  subject.Detach(this);
 | 
						|
}
 |