日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > <C++ 實現設計模式> 觀察者模式

<C++ 實現設計模式> 觀察者模式

來源:程序員人生   發布時間:2014-11-07 08:30:31 閱讀次數:3452次

視察者模式,又稱發布--定閱,mvc模式等. 通俗點講,比如股票來講,很多人關注1支股票,派1個人去視察股票的情況,1有變化(視察),就通知所有的預定這個消息的人.  

而我們常見的mvc模式,v是指view-視圖,m指model-模型,有點類似視察者模式,模型中的數據,1有變化就通知相干聯的視圖. 這樣很方便地隔離開了模型和視圖.

這里使用的例子是關于博客的定閱. 博客屬于被視察的對象,定閱者屬于視察者. 定閱者先定閱(注冊)博客,博客1有更新,就會遍歷注冊表,給定閱者推送更新的博客.

自己畫UML圖,,,我是自己畫的,UML圖對寫程序確切很有幫助.  下面直接給出相應代碼:

observer.h:

#ifndef OBSERVER_H #define OBSERVER_H #include<string> #include "subject.h" using namespace std; class Blog; class BlogCSDN; class Observer { public: Observer() {} virtual ~Observer() {} virtual void Update() {} }; class ObserverBlog : public Observer { private: string m_name; //視察者名稱 Blog *m_blog; //視察的博客,以鏈表的情勢更好,可以視察多個博客 public: ObserverBlog(string name, Blog *blog): m_name(name), m_blog(blog) {} ~ObserverBlog() {} void Update(); }; #endif


observer.cpp

#include "observer.h" #include<iostream> using namespace std; void ObserverBlog::Update() { string status = m_blog->GetStatus(); cout << m_name << "-------" << status << endl; }


subject.h

#ifndef SUBJECT_H #define SUBJECT_H #include<list> #include "observer.h" using namespace std; class Observer; class Blog { private: list<Observer *> m_observers; //視察者列表 protected: string m_status; //狀態 public: Blog() {} virtual ~Blog() {} void Attach(Observer *observer); //添加視察者 void Remove(Observer *observer); //移除視察者 void Notify(); //通知視察者 virtual void SetStatus(string s); //設置狀態 virtual string GetStatus(); //取得狀態 }; class BlogCSDN : public Blog { private: string m_name; //博主名字 public: BlogCSDN(string name) : m_name(name) {} ~BlogCSDN() {} void SetStatus(string s); string GetStatus(); }; #endif


subject.cpp

#include "subject.h" void Blog::Attach(Observer *observer) { m_observers.push_back(observer); } void Blog::Remove(Observer *observer) { m_observers.remove(observer); } void Blog::Notify() { list<Observer *>::iterator iter = m_observers.begin(); for(; iter != m_observers.end(); iter++) { (*iter)->Update(); } } void Blog::SetStatus(string s) { m_status = s; } string Blog::GetStatus() { return m_status; } void BlogCSDN::SetStatus(string s) { m_status = "csdn通知: " +m_name + s; } string BlogCSDN::GetStatus() { return m_status; }


main.cpp

#include "observer.h" #include "subject.h" int main() { Blog *blog = new BlogCSDN("zy416548283"); Observer *observer = new ObserverBlog("tutupig", blog); blog->Attach(observer); blog->SetStatus("發表視察者模式實現的文章"); blog->Notify(); delete blog; delete observer; return 0; }


編譯運行:

zy@zyPc:~/code/Cplus/designPattern/observer$ ./a.out tutupig-------csdn通知: zy416548283發表***文章


如果自己寫程序遇到交叉援用的問題(頭文件相互援用,又調用了類中的方法之類的),可以參考帖子:點擊打開鏈接 ,也能夠看看我的發問:點擊打開鏈接

PS:

參考博客:點擊打開鏈接

參考書籍:<23種設計模式-C++> ,<易學設計模式>




生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩高清影片在线观看 | 一区二区三区久久久 | 成人精品国产免费网站 | 国产一卡二卡在线 | 国产精品视频播放 | 日韩一级片免费在线观看 | 91精品国产99久久 | 欧美日韩99 | 免费看v片 | 一区二区高清在线 | 国产乱人乱精一区二视频国产精品 | 69视频在线播放 | 欧美二区三区 | 成人免费乱码大片a毛片软件 | 久久久久久久国产精品视频 | 久久久国产精品视频 | 久久久人成影片一区二区三区 | 国产免费视频在线 | 日韩精品一区在线观看 | 成人性生交大片免费看视频r | 国产第一精品 | 久久午夜影视 | 欧美日韩激情一区 | 在线免费视频日韩 | 金瓶狂野欧美性猛交xxxx | 色婷婷亚洲精品 | 亚洲精品电影网在线观看 | 国产精品久久久久一级毛片 | 日本免费看 | 黄色大片区| 国产一区二区三区在线视频观看 | 久久久九九 | 最新不卡av | 久久国产精 | 色婷婷精品国产一区二区三区 | 国产精品三级 | 曰韩在线 | 看全黄大色黄大片老人做 | 一区二区中文字幕 | 亚洲高清在线视频 | 免费av在线网站 |