#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Listenner
{
public:
virtual void onTeacherComming() = 0;
virtual void doBadthing() = 0;
};
class Notifier
{
public:
virtual void addListenner(Listenner *listenner) = 0;
virtual void delListenner(Listenner *listenner) = 0;
virtual void notify() = 0;
};
class Student :public Listenner
{
public:
Student(string name, string badthing)
{
this->name = name;
this->badthing = badthing;
}
virtual void onTeacherComming()
{
cout << "学生" << name << "发现班长给我使眼神了, 停止" << badthing << endl;
cout << "改为写作业" << endl;
}
virtual void doBadthing() {
cout << " 学生 " << name << "目前正在 " << badthing << endl;
}
private:
string name;
string badthing;
};
class Monitor :public Notifier
{
public:
virtual void addListenner(Listenner *listenner) {
this->l_list.push_back(listenner);
}
virtual void delListenner(Listenner *listenner) {
this->l_list.remove(listenner);
}
virtual void notify() {
for (list<Listenner *>::iterator it = l_list.begin(); it != l_list.end(); it++) {
(*it)->onTeacherComming();
}
}
private:
list<Listenner *> l_list;
};
int main(void)
{
Listenner *s1 = new Student("张三", "抄作业");
Listenner *s2 = new Student("李四", "打lol");
Listenner *s3 = new Student("王五", " 看李四玩lol");
Notifier *bossXu = new Monitor;
bossXu->addListenner(s1);
bossXu->addListenner(s2);
bossXu->addListenner(s3);
cout << "教师一片和谐,老师没有来 " << endl;
s1->doBadthing();
s2->doBadthing();
s3->doBadthing();
cout << "班长突然发现老师来了,给学生们使了一个眼神" << endl;
bossXu->notify();
return 0;
}