//造主题,主题是默认的新闻主页,主题下面还有具体的频道:经济、体育、娱乐。这样主题也分为两个层,观察者可以订阅新闻主页,也可以订阅具体的频道。
//观察者模式
//抽象类 观察者
class AbsObserver
{
public:
virtual void update(string content) = 0; //更新的接口
};
//主题类 发布者
class Subject
{
string title;// 标题
list<AbsObserver*> obs;//容器存放观察者父类指针
public:
Subject() {};
Subject(string t) :title(t) {};
virtual ~Subject() //回收所有观察者对象
{
if (obs.size() == 0)
{
return;
}
else
{
for (auto o : obs)
{
delete o; //回收堆内存
obs.remove(o);//将指针从容器中移除
}
}
}
void attach(AbsObserver* someone) //将某个观察者加入订阅 加入list
{
obs.