觀察者模式的故事–Symbian

來源:互聯網
上載者:User

 

觀察者模式是Symbian中使用非常多的一種模式 ,經過一天的研究,終於還是有點理解。

       觀察者模式定義了對象間的一對多的依賴關係:當一個對象(目標對象)發生改變時,所有依賴於它的對象(觀察者)都能得到通知。

        觀察者模式中的兩個關鍵對象是目標(Subject)和觀察者(Observer)。每個目標可以有一個或多個觀察者,目標提供了註冊和刪除觀察者對象的介面。具體的觀察者會實現目標中定義的獲得通知的介面,如觀察者介面Observer中定義的Update函數。當目標的狀態發生改變時,只需調用其基類中定義的Notify函數。該函數再調用每個觀察者的Updae函數。這樣,滅個具體的觀察者都會收到目標裝袋改變的通知,並且可以在其Update函數中實現其需要的行為。下面是在網上找到的C++實現代碼:

//介面<br />//ITransfer.h<br />#pragma once<br />  <br />class ITransfer<br />{<br />public:<br />  virtual bool DoTransfer(...) = 0;<br />};<br />class CFetionTransfer:public ITransfer<br />{<br />public:<br />  CFetionTransfer();<br />  ~CFetionTransfer();<br />  bool DoTransfer(...);<br />private:<br />  ......<br />};<br />  <br />class CMailTransfer: public ITransfer<br />{<br />public:<br />  CMailTransfer();<br />   ~CMailTransfer();<br />  bool DoTransfer(...);<br />private:<br />....<br />};<br />  <br />//TransferPool.h<br />#include "Transfer.h"<br />#include <vector><br />using namespace std;<br />  <br />class CTransferPool<br />{<br />private:<br />  vector<ITransfer*> vo;<br />public:<br />  virtual ~CTransferPool();<br />  <br />  void Login(ITransfer* po);<br />  <br />  void Logout(ITransfer* po);<br />  //向各成員廣播訊息<br />  void Notify(...);<br />};<br />  <br />//TransferPool.cpp<br />#include "TransferPool.h"<br />  <br />  <br />void CTransferPool::Login(ITransfer* po)//每一個需要通知的對象都添加進來<br />{<br />  vo.push_back(po);<br />}<br />  <br />  <br />void CTransferPool::Notify(...)<br />{<br />  vector<ITransfer*>::iterator vi = vo.begin();<br />  for (; vi != vo.end(); vi++)<br />  {<br />    ITransfer *s = *vi;<br />      <br />    (*vi)->DoTransfer(...);<br />  }<br />}<br />  <br />void main<br />{<br />  CTransferPool*m_pTranPool= new CTransferPool();<br />  <br />  CFetionTransfer *m_pFetionTran = new CFetionTransfer(...);<br />  CMailTransfer *m_pMailTran = new CMailTransfer(...);<br />  <br />  m_pTranPool->Login(m_pFetionTran);<br />  m_pTranPool->Login(m_pMailTran);<br />   <br />    while(需要發送訊息)<br />    {<br />      m_pTranPool->Notify();<br />    }<br />  <br />  ......  <br />} 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.