观察者模式--------设计模式一
来源:互联网 发布:安信农业 源码 编辑:程序博客网 时间: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
- 设计模式-观察者(一)
- 观察者模式--------设计模式一
- 设计模式一:观察者模式
- 设计模式(一) 观察者模式
- 设计模式--观察者模式(一)
- 设计模式(一)观察者设计模式
- 每天一设计模式之观察者模式
- Spring框架设计模式一:观察者模式
- 设计模式-观察者模式(一)
- 设计模式之观察者模式(一)
- 设计模式学习(一)观察者模式
- (一)设计模式复习之观察者模式
- 设计模式之观察者模式(一)
- 设计模式一之观察者模式
- 设计模式(一) 观察者模式、装饰模式、工厂模式
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- oracle数据库导入导出命令!
- 设定软件使用期限,根据网络时间保护试用软件产品的方法
- DialogFragment背景shape圆角bottom无效
- 数据仓库技术及其演变
- Python生成器的工作过程
- 观察者模式--------设计模式一
- sqlite实现新闻收藏和取消收藏
- Multi-threading Model: My Interesting Part in Android
- 轻松记住大端小端的含义(附对大端和小端的解释)
- 关于url的编码问题
- DirectX11 动态缓存
- hadoop 离开安全模式
- CentOS6.4.i686下Oracle安装—包安装失败
- 80个Python经典资料(教程+源码+工具)汇总——下载目录