设计模式学习过程

博客园中的文章链接如下

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 #define IOBSERVER_H #include <string> class IObserver { public: virtual void Notify(std::string display) = 0; }; #endif // IOBSERVER_H 

IObservable.h

#ifndef IOBSERVABLE_H #define IOBSERVABLE_H #include "IObserver.h" class IObservable { public: virtual void Register(IObserver *pObserver) = 0; virtual void UnRegister(IObserver *pObserver) = 0; }; #endif // IOBSERVABLE_H 

ObservableImp.h

#ifndef OBSERVABLEIMP_H #define OBSERVABLEIMP_H #include "IObservable.h" #include <vector> using namespace std; class ObservableImp : public IObservable { public: ObservableImp(); virtual ~ObservableImp(); virtual void Register(IObserver *pObserver); virtual void UnRegister(IObserver *pObserver); void NotifyObservers(IObserver *pObserver); protected: private: vector<IObserver *> observerList; }; #endif // OBSERVABLEIMP_H 

Stock.h

 

#ifndef STOCK_H #define STOCK_H #include "ObservableImp.h" class Stock : public ObservableImp { public: Stock() {} virtual ~Stock() {} void SetPrice(int iPrice, IObserver *pObserver) { m_iPrice = iPrice; NotifyObservers(pObserver); } protected: private: int m_iPrice; }; #endif // STOCK_H 

 

StockDisplay.h
#ifndef STOCKDISPLAY_H #define STOCKDISPLAY_H #include "IObserver.h" #include <iostream> class StockDisplay : public IObserver { public: StockDisplay(){} virtual ~StockDisplay(){} virtual void Notify(std::string display){std::cout<<display<<std::endl;} protected: private: }; #endif // STOCKDISPLAY_H 
ObservableImp.cpp
#include "../include/ObservableImp.h" ObservableImp::ObservableImp() { //ctor } ObservableImp::~ObservableImp() { //dtor } void ObservableImp::Register(IObserver* pObserver) { observerList.push_back(pObserver); } void ObservableImp::UnRegister(IObserver* pObserver) { vector<IObserver *>::iterator iter; for(iter = observerList.begin(); iter != observerList.end(); iter++) if(*iter == pObserver) break; observerList.erase(iter); } void ObservableImp::NotifyObservers(IObserver* pObserver) { vector<IObserver *>::iterator iter; for(iter = observerList.begin(); iter != observerList.end(); iter++) if(*iter == pObserver) pObserver->Notify("testing"); }  
测试代码main中代码如下:
#include "include/Stock.h" #include "include/StockDisplay.h" #include <stdio.h> int main() { Stock *s = new Stock(); StockDisplay *sd = new StockDisplay(); s->Register(sd); s->SetPrice(5,sd); s->UnRegister(sd); getchar(); return 0; }  

 

你可能感兴趣的:(设计模式,String,测试,iterator,Class,testing)