設計模式學習過程

來源:互聯網
上載者:User

部落格園中的文章連結如下

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 /> 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.