程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 設計模式--觀察者模式(C++)

設計模式--觀察者模式(C++)

編輯:關於C++

作者:劉勉剛 E-mail:[email protected]

觀察者模式是應用非常廣泛的設計模式之一,前面已經用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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved