九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開發(fā)經(jīng)驗為您護航

18678812288
0531-88887250

中介者模式----C++實現(xiàn)

文章作者:濟南軟件開發(fā) 時間:2016年12月20日

觀察者模式

定義:

定義一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。

實用性:

1、當(dāng)一個抽象模型有兩個方面,其中一個方面依賴于另一方面。將這二者封裝在獨立的對象中以使它們可以各自地改變和復(fù)用。

2、當(dāng)一個對象改變時需要同時改變其它對象,而不知道具體有多少對象有待改變。

3、當(dāng)一個對象必須通知其他對象,而它又不能假定其它對象是誰。也就是說,不希望這些對象是緊密耦合的。

 

優(yōu)點:

1、 目標(biāo)和觀察這間抽象耦合。

2、 支持廣播通信

缺點:

可能出現(xiàn)意外更新。

實現(xiàn):

class Subject;

class Observer

{

public:

virtual~Observer() {}

virtual void Handle(Subject *pSubject) = 0;

};

 

class Subject

{

public:

 

virtual~Subject()

{

}

 

voidAttack(Observer *pObserver)

{

m_ObserverList.push_back(pObserver);

}

 

voidDetach(Observer *pObserver)

{

m_ObserverList.remove(pObserver);

}

 

voidNotify()

{

for (list::iterator it =m_ObserverList.begin(); it != m_ObserverList.end(); ++it)

{

(*it)->Handle(this);

}

}

 

virtualstring GetName()

{

return "";

}

 

virtual void SetState(string state)

{

 

}

 

virtual stringGetState()

{

return "";

}

private:

 

list m_ObserverList;

 

};

 

class ConcreteSubject:public Subject

{

public:

ConcreteSubject(string name):m_name(name)

{

 

}

string GetState()

{

return m_state;

}

 

void SetState(string state)

{

m_state = state;

}

 

string GetName()

{

return m_name;

}

private:

string m_state;

string m_name;

};

 

 

class ConcreteObserver:public Observer

{

public:

ConcreteObserver(stringname):m_name(name)

{

}

 

voidHandle(Subject *pSubject)

{

cout<<m_name<<"接收到信息:";< p="" style="margin: 0px; padding: 0px;">

cout<GetName()<<" "<GetState()<<endl;< p="" style="margin: 0px; padding: 0px;">

}

private:

string m_name;

};

 

Observer *pObserver1 = new ConcreteObserver("觀察者1");

Observer *pObserver2 = new ConcreteObserver("觀察者2");

Observer *pObserver3 = new ConcreteObserver("觀察者3");

Subject *pSubject1 = new ConcreteSubject("目標(biāo)對象1");

Subject *pSubject2 = new ConcreteSubject("目標(biāo)對象2");

pSubject1->Attack(pObserver1);

pSubject1->Attack(pObserver2);

pSubject1->Attack(pObserver3);

pSubject2->Attack(pObserver2);

pSubject2->Attack(pObserver3);

pSubject1->SetState("工作中。。。");

pSubject2->SetState("休息中。。。");

pSubject1->Notify();

pSubject2->Notify();

pSubject2->SetState("工作中。。。");

pSubject1->SetState("休息中。。。");

pSubject1->Notify();

pSubject2->Notify();



    想要了解更多詳情歡迎來電咨詢18678812288
    登陸網(wǎng)址:m.h6244.cn。
    聯(lián)系人:王經(jīng)理。

    吴忠市| 色达县| 桑日县| 东兴市| 河间市| 黎城县| 尖扎县| 石棉县| 济南市| 苍山县| 桓仁| 临湘市| 通许县| 铜梁县| 筠连县| 游戏| 确山县| 嘉禾县| 上杭县| 左权县| 三原县| 巧家县| 民乐县| 海淀区| 聂拉木县| 周口市| 乌海市| 宕昌县| 宝坻区| 舟山市| 恩施市| 牙克石市| 泸州市| 常山县| 临邑县| 陇川县| 新营市| 双城市| 肇源县| 东阿县| 峨山|