原始观察者模式:
增加一个Message类,用来传递消息
外部发送一个message给 [被观察者],[被观察者]发这个message发送给[观察者]
代码如下:
#include <iostream>
#include <vector>
using namespace std;
class Message;
class Observer;
class Subject
{
public:
virtual void pushMessage(const Message & msg) = 0;
virtual void addAttach(Observer * ) = 0;
virtual void dettach(Observer *) = 0;
virtual void notify() = 0;
};
class Message
{
public:
Message()
{
}
void setMessage(string msg)
{
m_Message = msg;
}
string getMessage()const
{
return m_Message;
}
private:
string m_Message;
};
class Observer
{
public:
virtual void update(const Message & msg) = 0;
};
class SubObserver :public Observer
{
string m_Name;
public:
SubObserver(string name):m_Name(name)
{
}
virtual void update(const Message & msgx)
{
cout << m_Name.c_str() <<" update: "<< msgx.getMessage().c_str() << endl;
}
};
class OneSubject : public Subject
{
private:
vector<Observer*> m_Observer;
vector<Message> m_Messages;
public:
virtual void pushMessage(const Message & msg)
{
m_Messages.push_back(msg);
}
virtual void addAttach(Observer *att)
{
m_Observer.push_back(att);
}
virtual void dettach(Observer *att)
{
vector<Observer*>::iterator it = m_Observer.begin();
for (; it != m_Observer.end(); it++)
{
if (*it == att)
{
m_Observer.erase(it);
}
}
}
virtual void notify()
{
vector<Observer*>::iterator it = m_Observer.begin();
for (; it != m_Observer.end(); it++)
{
(*it)->update(m_Messages[0]);
}
m_Messages.erase(m_Messages.begin());
}
};
int main()
{
OneSubject center;
SubObserver one("one");
SubObserver two("two");
SubObserver three("three");
center.addAttach(&one);
center.addAttach(&two);
center.addAttach(&three);
Message msg;
msg.setMessage("DOMessage");
center.pushMessage(msg);
center.notify();
system("pause");
return 0;
}