当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

设计模式--观察者模式(C++)

时间:2015/5/19 21:35:23 作者:平凡之路 来源:xuhantao.com 浏览:

作者:刘勉刚 E-mail:liumgj@163.com

观察者模式是应用非常广泛的设计模式之一,前面已经用C#实现了,下面是C++的实现,在C++实现中,C++中没有接口的概念,但是可以用抽象类类代替Java或C#中的接口,在C++中抽象类中从派生类中抽象出来的函数(方法),必须定义成纯虚函数,这样在后面的使用中才可以通过基类的指针来访问这些函数,面向对象的语言中有个特点,多态只能访问两者中共有的部分。

#include
#include
#include
using namespace std;

class Observer;
class Subject
{
public:
virtual void attach(Observer *o)=0;
virtual void change()=0;
virtual void setWeather(string str)=0;
virtual string getWeather()=0;
};
class Observer
{
public:
virtual string getName()=0;
virtual void update(Subject *s)=0;
};

class Earth:public Subject
{
private:
string weather;
list
*l;
public:
Earth()
{
l = new list
();
}
void attach(Observer *o)
{
this->l->push_back(o);
};
void change()
{
for(list
::iterator it=l->begin();it!=l->end();++it)
{
(*it)->update(this);
}
};
void setWeather(string str)
{
this->weather=str;
change();
};
string getWeather()
{
return this->weather;
};
};
class Satellite:public Observer
{
private:
string name;
public:
Satellite(string str)
{
name=str;
}
string getName()
{
return name;
};
void update(Subject *s)
{
cout〈〈this->getName()+" "+s->getWeather()<
};
};


int main()
{
Earth e;
Satellite *s1 = new Satellite("风云一号");
Satellite *s2 = new Satellite("风云二号");
Satellite *s3 = new Satellite("风云三号");
Satellite *s4 = new Satellite("风云四号");
e.attach(s1);
e.attach(s2);
e.attach(s3);
e.attach(s4);
e.setWeather("fine");
return 0;
}

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1