#include
#include
#include
#include
using namespace std;
using FunType = function; // handler type
class Observer1
{
public:
string mName;
Observer1(string name):mName(name){}
void update1()
{
cout << " - Observer-1: " << mName << " Notified." << endl;
}
};
class Observer2
{
public:
string mName;
Observer2(string name):mName(name){}
void update2()
{
cout << " - Observer-2: " << mName << " Notified." << endl;
}
};
class Subject
{
public:
vector handlers;
void Register(FunType f)
{
handlers.push_back(f);
}
void Notify()
{
for(auto f: handlers)
{
f();
}
}
};
int main(int argc,char **argv)
{
Subject s;
Observer1 obs1("Jack");
Observer2 obs2("Alice");
s.Register(bind(obs1.update1,obs1));//bind将成员函数和对象绑定,返回一个函数对象;
s.Register(bind(obs2.update2,obs2));
s.Register(bind(obs1.update1,obs1));
s.Notify();
return 0;
}