代码拉取完成,页面将自动刷新
#include <iostream>
#include <vector>
using namespace std;
class Subject;
class Obesever {
public:
virtual void update(Subject* sub) = 0;
};
class Subject {
private:
vector<Obesever*> m_objs;
public:
void attach(Obesever* o) {
m_objs.push_back(o);
}
void detach(Obesever* o) {
for (vector<Obesever*>::iterator itr=m_objs.begin(); itr!=m_objs.end(); itr++) {
if (*itr == o) {
m_objs.erase(itr);
return;
}
}
}
void notify() {
for (vector<Obesever*>::iterator itr=m_objs.begin(); itr!=m_objs.end(); itr++) {
(*itr)->update(this);
}
}
virtual int getState() = 0;
virtual void setState(int state) = 0;
};
class ConcretSubject: public Subject {
private:
int m_state;
public:
int getState(){
return m_state;
}
void setState(int state) {
m_state = state;
}
};
class ConcretObesever: public Obesever {
private:
string m_name;
public:
ConcretObesever(string name) {
m_name = name;
}
void update (Subject* sub) {
cout << "update obesever[" << m_name << ", state:" << sub->getState() << "]" << endl;
}
};
int main(int argc, char** argv) {
Subject* subject = new ConcretSubject();
Obesever* obea = new ConcretObesever("A");
Obesever* obeb = new ConcretObesever("B");
subject->attach(obea);
subject->attach(obeb);
subject->setState(1);
subject->notify();
subject->detach(obeb);
subject->setState(0);
subject->notify();
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。