观察者模式--------设计模式一

来源:互联网 发布:安信农业 源码 编辑:程序博客网 时间:2024/05/17 05:00


先上代码,

Observers.h

#pragma once#include <iostream>#include <list>#include <string>class Subject;class Observer{public:Observer(Subject* _sub, std::string _str, bool AutoConnect = true);~Observer();void OnUpdate();protected:virtual void Connect();virtual void DisConnect();private:Subject* sub;std::string obStr;};class Subject{public:Subject(std::string str);virtual void Add(Observer* ob);virtual void Delete(Observer* ob);void OnUpdate();std::string getName();protected:private:std::list<Observer*> obList;std::string strName;};void Observers_Test();
Observers.cpp

#include "stdafx.h"#include "Observers.h"void Observer::OnUpdate(){std::cout<<"this is ="<<this<<"  "<<obStr<<"..."<<sub->getName()<<"\n";}Observer::Observer(Subject* _sub, std::string _str, bool AutoConnect /*= true*/) :sub(_sub),obStr(_str){if (AutoConnect){Connect();}}void Observer::DisConnect(){sub->Delete(this);}void Observer::Connect(){sub->Add(this);}Observer::~Observer(){DisConnect();}void Subject::OnUpdate(){if (! obList.empty()){std::list<Observer*>::const_iterator itOb = obList.begin();for (; itOb != obList.end(); itOb++){(*itOb)->OnUpdate();}}}void Subject::Delete(Observer* ob){if (ob){obList.remove(ob);}}void Subject::Add(Observer* ob){if (ob){obList.push_front(ob);}}Subject::Subject(std::string str) :strName(str){}std::string Subject::getName(){return strName;}void Observers_Test(){Subject* sub  = new Subject("师傅被妖怪抓走了");Observer* ob1 = new Observer(sub, "孙悟空");Observer* ob2 = new Observer(sub, "猪八戒");Observer* ob3 = new Observer(sub, "沙和尚");// sub->Add(ob1);// sub->Add(ob2);// sub->Add(ob3);sub->OnUpdate();system("pause");}



0 0
原创粉丝点击