部落格園中的文章連結如下
http://www.cnblogs.com/hegezhou_hot/category/260424.html
看了單件,工廠,抽象原廠模式。
這個連結的文章
http://www.cnblogs.com/bear831204/archive/2010/10/22/1858395.html
講了觀察者模式。
學習了觀察者模式用c++實現了一份代碼:
IObserver.h
#ifndef IOBSERVER_H<br />#define IOBSERVER_H<br />#include <string><br />class IObserver<br />{<br /> public:<br /> virtual void Notify(std::string display) = 0;<br />};<br />#endif // IOBSERVER_H
IObservable.h
#ifndef IOBSERVABLE_H<br />#define IOBSERVABLE_H<br />#include "IObserver.h"<br />class IObservable<br />{<br /> public:<br /> virtual void Register(IObserver *pObserver) = 0;<br /> virtual void UnRegister(IObserver *pObserver) = 0;<br />};<br />#endif // IOBSERVABLE_H
ObservableImp.h
#ifndef OBSERVABLEIMP_H<br />#define OBSERVABLEIMP_H<br />#include "IObservable.h"<br />#include <vector><br />using namespace std;<br />class ObservableImp : public IObservable<br />{<br /> public:<br /> ObservableImp();<br /> virtual ~ObservableImp();<br /> virtual void Register(IObserver *pObserver);<br /> virtual void UnRegister(IObserver *pObserver);<br /> void NotifyObservers(IObserver *pObserver);<br /> protected:<br /> private:<br /> vector<IObserver *> observerList;<br />};<br />#endif // OBSERVABLEIMP_H
Stock.h
#ifndef STOCK_H<br />#define STOCK_H<br />#include "ObservableImp.h"<br />class Stock : public ObservableImp<br />{<br />public:<br /> Stock() {}<br /> virtual ~Stock() {}<br /> void SetPrice(int iPrice, IObserver *pObserver)<br /> {<br /> m_iPrice = iPrice;<br /> NotifyObservers(pObserver);<br /> }<br />protected:<br />private:<br /> int m_iPrice;<br />};<br />#endif // STOCK_H
StockDisplay.h#ifndef STOCKDISPLAY_H<br />#define STOCKDISPLAY_H<br />#include "IObserver.h"<br />#include <iostream><br />class StockDisplay : public IObserver<br />{<br /> public:<br /> StockDisplay(){}<br /> virtual ~StockDisplay(){}<br /> virtual void Notify(std::string display){std::cout<<display<<std::endl;}<br /> protected:<br /> private:<br />};<br />#endif // STOCKDISPLAY_H ObservableImp.cpp#include "../include/ObservableImp.h"<br />ObservableImp::ObservableImp()<br />{<br /> //ctor<br />}<br />ObservableImp::~ObservableImp()<br />{<br /> //dtor<br />}<br />void ObservableImp::Register(IObserver* pObserver)<br />{<br /> observerList.push_back(pObserver);<br />}<br />void ObservableImp::UnRegister(IObserver* pObserver)<br />{<br /> vector<IObserver *>::iterator iter;<br /> for(iter = observerList.begin(); iter != observerList.end(); iter++)<br /> if(*iter == pObserver)<br /> break;<br /> observerList.erase(iter);<br />}<br />void ObservableImp::NotifyObservers(IObserver* pObserver)<br />{<br /> vector<IObserver *>::iterator iter;<br /> for(iter = observerList.begin(); iter != observerList.end(); iter++)<br /> if(*iter == pObserver)<br /> pObserver->Notify("testing");<br />}<br /> 測試代碼main中代碼如下:#include "include/Stock.h"<br />#include "include/StockDisplay.h"<br />#include <stdio.h><br />int main()<br />{<br /> Stock *s = new Stock();<br /> StockDisplay *sd = new StockDisplay();<br /> s->Register(sd);<br /> s->SetPrice(5,sd);<br /> s->UnRegister(sd);<br /> getchar();<br /> return 0;<br />}<br />