最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++設(shè)計模式之觀察者模式(Observer)

 更新時間:2018年04月07日 10:57:48   作者:chencarl  
這篇文章主要為大家詳細介紹了C++設(shè)計模式之觀察者模式Observer,具有一定的參考價值,感興趣的小伙伴們可以參考一下

觀察者模式通常的叫法叫做訂閱-發(fā)布模式,類似于報刊雜志的訂閱,觀察者和被觀察者就是讀者和郵局的關(guān)系,讀者先要在郵局訂閱想要的報刊,當報刊發(fā)行時,郵局會將報刊郵寄到讀者家里。觀察者(Observer)和被觀察者(Listener)也是這種關(guān)系,Observer將自己attach到Listener中,當Listener觸發(fā)時Notify所有Observer.

作用

在觀察者模式中,被觀察者維護觀察者對象的集合,當被觀察者對象變化時,它會通知觀察者。觀察者模式主要是用于解決對象之間一對多的關(guān)系。

類視圖

實現(xiàn)

class Observer 
{
public:
  virtual ~Observer() {};
  virtual void Update(const std::string &msg)= 0; 
protected:
  Observer(){};
};


class Listener
{
public:
  virtual ~Listener() {};
  void attach(Observer* obsvr) 
  {
    m_observers.push_back(obsvr);
  }
  void remove(Observer* obsvr)
  {
    m_observers.remove(obsvr);
  }
  void notify(const std::string &msg)
  {
    list<Observer*>::iterator iter = m_observers.begin(); 
    for(; iter != m_observers.end(); iter++) 
      (*iter)->Update(msg); 
  }
private: 
  list<Observer* > m_observers; //觀察者鏈表 
};


class logRunner : public Listener
{
public:
  virtual ~logRunner(){};
  void addmsg(const std::string &msg)
  {
    nofity(msg);
  }
}

class logGui : public Observer
{
public:
  virtual ~Observer(){};
  void Update(const std::string &msg)
  {
    cout<< "Gui log show : "<< msg <<endl;
  }
}

class logFile : public Observer
{
public:
  virtual ~Observer(){};
  void Update(const std::string &msg)
  {
    cout<< "file log write : "<< msg <<endl;
  }
}

class logDebug : public Observer
{
public:
  virtual ~Observer(){};
  void Update(const std::string &msg)
  {
    cout<< "Debug log out : "<< msg <<endl;
  }
}


class logDataBase : public Observer
{
public:
  virtual ~Observer(){};
  void Update(const std::string &msg)
  {
    cout<< "DataBase log in : "<< msg <<endl;
  }
}

int main()
{
  logRunner Runner;
  logGui gGui;
  logFile gFile;
  logDebug gDebug;
  logDataBase gDataBase;
  
  Runner.attach(&gGui);
  Runner.attach(&gFile);
  Runner.attach(&gDebug);
  Runner.attach(&gDataBase);
  
  Runner.addmsg("app is setup");
}

Observer中update一般為純虛,通過子類各自實現(xiàn),這里只是保證調(diào)用的接口一致,Listener中的attach、remove、notify一般建議不進行虛化,子類不用關(guān)心其內(nèi)部的聚合內(nèi)容,通過調(diào)用notify實現(xiàn)消息分發(fā)即可。當然也可以虛化,將這一系列的操作放到子類進行實現(xiàn)。
調(diào)用者應該注意在多線程環(huán)境中的使用環(huán)境,做好數(shù)據(jù)的同步工作。

應用場景

  • 當一個對象改變需要通知到其他對象,而我們不確定由多少對象需要通知時;
  • 當一個對象必須通知其他對象,而不需要知道對象是什么實現(xiàn)時;
  • 對于一堆對象,包含同樣的狀態(tài)或同樣的數(shù)據(jù),通過同一個條件進行更新時。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 零基礎(chǔ)學習C/C++需要注意的地方

    零基礎(chǔ)學習C/C++需要注意的地方

    這篇文章主要介紹了零基礎(chǔ)學習C/C++需要注意的地方,文中講解非常細致,供大家參考和學習,想要學習C/C++的可以閱讀此文
    2020-06-06
  • C語言實現(xiàn)求解素數(shù)的N種方法總結(jié)

    C語言實現(xiàn)求解素數(shù)的N種方法總結(jié)

    哈嘍各位友友們,今天又學到了很多有趣的知識,現(xiàn)在迫不及待的想和大家分享一下!本文將手把手帶領(lǐng)大家探討利用試除法、篩選法求解素數(shù)的n層境界!都是精華內(nèi)容,可不要錯過喲
    2023-01-01
  • C語言編程中生成隨機數(shù)的入門教程

    C語言編程中生成隨機數(shù)的入門教程

    這篇文章主要介紹了C語言編程中生成隨機數(shù)的入門教程,包括利用rand()函數(shù)來編寫隨機數(shù)生成器的示例,要的朋友可以參考下
    2015-12-12
  • C++遍歷某個文件夾下面的子文件夾及其所有文件

    C++遍歷某個文件夾下面的子文件夾及其所有文件

    這篇文章主要介紹了C++獲取某個文件夾下面的子文件夾及其所有文件,需要的朋友可以參考下
    2021-07-07
  • boost.asio框架系列之定時器Timer

    boost.asio框架系列之定時器Timer

    這篇文章介紹了boost.asio框架系列之定時器Timer,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C語言字符串函數(shù)入門

    C語言字符串函數(shù)入門

    這篇文章主要為大家介紹了C語言字符串函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++的std::transform()的實現(xiàn)

    C++的std::transform()的實現(xiàn)

    在 C++ 標準庫中,std::transform() 是一個非常有用的算法函數(shù),它能夠?qū)⒔o定范圍中的每個元素進行變換,并將變換后的結(jié)果存儲到另一個范圍中,本文就詳細的介紹一下具體用法,感興趣的可以了解一下
    2023-08-08
  • C語言實現(xiàn)歌手比賽系統(tǒng)

    C語言實現(xiàn)歌手比賽系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)歌手比賽系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解C++ 中的三種繼承方式

    詳解C++ 中的三種繼承方式

    這篇文章主要介紹了詳解C++ 中的三種繼承方式,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++中指向?qū)ο蟮某V羔樑c指向常對象的指針詳解

    C++中指向?qū)ο蟮某V羔樑c指向常對象的指針詳解

    如果一個變量已經(jīng)被聲明成常變量,則只能用指向常變量的指針變量指向它,而不能用一般的(非const型的)指針變量指向它
    2013-10-10

最新評論

明水县| 浠水县| 金门县| 梁河县| 桐梓县| 手游| 天长市| 四川省| 乌苏市| 察哈| 锡林浩特市| 定州市| 萨迦县| 东台市| 罗山县| 汉阴县| 青岛市| 抚远县| 安远县| 天门市| 平山县| 怀安县| 临湘市| 南平市| 措勤县| 濮阳市| 永善县| 瑞昌市| 高要市| 体育| 关岭| 星座| 武乡县| 巴彦淖尔市| 永州市| 黄陵县| 五华县| 靖远县| 白玉县| 灌阳县| 南投县|