16,470
社区成员
发帖
与我相关
我的任务
分享
void update(HWND hDlg)
{
//cout << name << " 收到消息:" << sub->action << endl;
if (sub->action == true)
SetDlgItemText(hDlg, IDC_STATIC2, em);
}
//////////////////////////////////////////////////////////////定义观察者模式
class Observer;
//抽象通知者
class Subject
{
protected:
list<Observer*> observers;
public:
int action; //定义状态的数据类型
virtual void attach(Observer*) = 0;
virtual void detach(Observer*) = 0;
virtual void notify() = 0;
};
//具体通知者,秘书
class Secretary :public Subject
{
void attach(Observer *observer)
{
observers.push_back(observer);
}
void detach(Observer *observer)
{
list<Observer *>::iterator iter = observers.begin();
while (iter != observers.end())
{
if ((*iter) == observer)
{
observers.erase(iter);
}
++iter;
}
}
void notify()
{
list<Observer *>::iterator iter = observers.begin();
while (iter != observers.end())
{
(*iter)->update();
++iter;
}
}
};
//抽象观察者
class Observer
{
protected:
string name;
Subject *sub;
public:
Observer(string name, Subject *sub)
{
this->name = name;
this->sub = sub;
}
virtual void update() = 0;
};
//具体的观察者,显示器
class DisplayObserver :public Observer
{
public:
DisplayObserver(string name, Subject *sub) :Observer(name, sub)
{
}
void update()
//void DisplayObserver::update()
{
//cout << name << " 收到消息:" << sub->action << endl;
if (sub->action == true)
GetDlgItem( IDC_STATIC2)->SetWindowText(em);
}
};