设计模式 Design Parttern ——观察者模式Observer
2010-10-23 22:45
330 查看
设计模式 Design Parttern ——观察者模式Observer
http://blog.csdn.net/leeidea
1:头文件
2:源文件
3:用户文件main.c
http://blog.csdn.net/leeidea
1:头文件
#ifndef _OBSERVER_H_VANEY_ #define _OBSERVER_H_VANEY_ #include <iostream> using namespace std; /****************************************************************** 名称 :Observer.h 版本 :1.00 描述 :演示观察者模式的概念 作者 :vaney.li@gmail.com http://blog.csdn.net/leeidea 日期 :2010年10月23日 版权 :vaney.li@gmail.com http://blog.csdn.net/leeide ******************************************************************/ /* 官方解释:The Observer defines a one to many relationship, so that when one object changes state, the others are notified and updated automatically. 我的理解:一个事务的变动会影响很多的其他事情 我的应用:广播,股市波动 */ //抽象炒股者 class CStock; class CObserver { public: CObserver() { cout << "CObserver()" << endl; } virtual ~CObserver() { cout << "~CObserver()" << endl; } public: //需要子类实现的方法 virtual void SellOrBuy(CStock* stock) = 0; }; //股票 #define NUM_OBJECT 10 class CStock { int _count; //股票价格 int _price; CObserver* object[NUM_OBJECT]; public: CStock():_count(0),_price(0) { for(int i = 0; i < NUM_OBJECT; i++) { object[i] = 0; } cout << "CStock()" << endl; } virtual ~CStock() { for(int i = 0; i < _count; i++) { if(object[i]) delete object[i]; object[i] = 0; } _count = 0; cout << "~CStock()" << endl; } public: virtual void Resigter(CObserver* ob) { if(_count < NUM_OBJECT && ob) { object[_count++] = ob; } } //需要子类实现的方法 virtual void Notify() { for(int i = 0; i < _count; i++) { if(object[i]) object[i]->SellOrBuy(this); } } public: void SetPrice(int price) { _price = price; } int GetPrice() { return _price; } }; //机构 class CObserverCompany : public CObserver { public: CObserverCompany() { cout << "CObserverCompany()" << endl; } virtual ~CObserverCompany() { cout << "~CObserverCompany()" << endl; } public: //需要子类实现的方法 virtual void SellOrBuy(CStock* stock) { if(100 > stock->GetPrice()) { cout << "Company sell" << endl; } else { cout << "Company buy" << endl; } } }; //散户 class CObserverPerson : public CObserver { public: CObserverPerson() { cout << "CObserverPerson()" << endl; } virtual ~CObserverPerson() { cout << "~CObserverPerson()" << endl; } public: //需要子类实现的方法 virtual void SellOrBuy(CStock* stock) { if(10 > stock->GetPrice()) { cout << "Person sell" << endl; } else { cout << "Person buy" << endl; } } }; //操盘手 class CBoss { CStock* _stock; public: CBoss(CStock* stock):_stock(stock) { cout << "CBoss()" << endl; } virtual ~CBoss() { cout << "~CBoss()" << endl; } public: virtual void ChangePrice(int price) { if(_stock) _stock->SetPrice(price); } }; #define C_API extern "C" //用户 C_API int UsingOB(); #endif
2:源文件
#include "Observer.h" C_API int UsingOB() { //创建股民,机构即观察者 CObserverCompany* company = new CObserverCompany(); CObserverPerson* person = new CObserverPerson(); //创建股票,即观察者需要观察的东西 CStock* stock = new CStock(); //创建改变股价的操盘手 CBoss* boss = new CBoss(stock); //关联 stock->Resigter(company); stock->Resigter(person); boss->ChangePrice(100); //通知所有的股民,机构 stock->Notify(); boss->ChangePrice(5); stock->Notify(); return 1; }
3:用户文件main.c
extern int UsingOB(); //系统默认入口 int _tmain(int argc, _TCHAR* argv[]) { return UsingOB(); }
相关文章推荐
- 设计模式之 观察者模式 the observer design pattern ---------《head first design pattern》
- 设计模式之 观察者模式 the observer design pattern
- 设计模式学习笔记--观察者(Observer)模式
- Net设计模式之观察者模式(Observer Pattern)(2)
- Java设计模式之Observer 观察者模式
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式学习笔记-观察者模式(Observer)
- 设计模式-观察者模式(Observer)
- .NET实用设计模式:观察者模式(Observer)
- Js-JavaScript 观察者设计模式 Observer Pattern
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- php设计模式 Observer(观察者模式)
- 设计模式之观察者模式(ObserverMethod)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- 设计模式--观察者(Observer)
- Java设计模式透析之 ——观察者模式(Observer)
- 观察者设计模式Observer
- java设计模式--观察者模式 Observer
- 设计模式--观察者模式Observer(行为性)