C++设计模式 -> 行为型 -> 观察者模式(Observer Pattern)
来源:互联网 发布:绵阳cnc编程招聘 编辑:程序博客网 时间:2024/05/16 17:40
——————- 抽象事件 | 具体事件 ——————–
—————– 抽象观察者 | 具体观察者 ——————
逻辑
Base_Event.h
#ifndef SUBJECT_H#define SUBJECT_Hclass Base_Observer;// 抽象事件class Base_Event{public: virtual void Add_Observer_Into_Container(Base_Observer *) = 0; // 观察者集合(容器加入) virtual void Delete_Observer_From_Container(Base_Observer *) = 0; // 观察者集合(容器删除) virtual void Event_Appear() = 0; // 事件发生protected:private:};#endif // SUBJECT_H
Concrete_Event.h
#ifndef CONCRETE_SUBJECT_H#define CONCRETE_SUBJECT_H#include "Base_Event.h"#include "Base_Observer.h"#include <iostream>#include <string>#include <list>using namespace std;// 具体事件class Concrete_Event : public Base_Event{public: Concrete_Event(){ this->event_name = ""; } void Event_Type(string event){ this->event_name = event; cout << event_name << endl; } void Add_Observer_Into_Container(Base_Observer* observer){ observer_container.push_back(observer); } void Delete_Observer_From_Container(Base_Observer* observer){ observer_container.remove(observer); } void Event_Appear(){ list<Base_Observer* >::iterator it = observer_container.begin(); while (it != observer_container.end()){ (*it)->Observer_Action(this->event_name); ++it; } }protected:private: list<Base_Observer* > observer_container; // 被事件触发的观察者(容器) string event_name;};#endif // CONCRETE_SUBJECT_H
Base_Observer.h
#ifndef OBSERVER_H#define OBSERVER_H#include <iostream>using namespace std;// 抽象观察者class Base_Observer{public: virtual void Observer_Action(string) = 0; // 观察者反应动作protected:private:};#endif // OBSERVER_H#pragma once
Concrete_Observer.h
#ifndef CONCRETE_OBSERVER_H#define CONCRETE_OBSERVER_H#include "Base_Observer.h"#include <iostream>#include <string>using namespace std;// 具体观察者1class Concrete_Observer1 : public Base_Observer{public: Concrete_Observer1(string name) :observer_name(name) {} void Observer_Action(string event){ cout << observer_name << " say : i see " << event << endl; }protected:private: string observer_name; // 名字};// 具体观察者2class Concrete_Observer2 : public Base_Observer{public: Concrete_Observer2(string name) :observer_name(name) {} void Observer_Action(string event){ cout << observer_name << " say :i see " << event << endl; }protected:private: string observer_name; // 名字};#endif // CONCRETE_OBSERVER_H#pragma once
main.cpp
#include "Concrete_Event.h"#include "Concrete_Observer.h"#ifndef SAFE_DELETE#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }#endifint main(){ // 创建主题、观察者 Concrete_Event* Concrete_Event_Index = new Concrete_Event; Base_Observer* people_1_index = new Concrete_Observer1("man"); Base_Observer* people_2_index = new Concrete_Observer2("women"); // 在事件里注册观察者 Concrete_Event_Index->Add_Observer_Into_Container(people_1_index); Concrete_Event_Index->Add_Observer_Into_Container(people_2_index); // 事件出现 Concrete_Event_Index->Event_Type("a Dog"); //事件反应在观察者身上 Concrete_Event_Index->Event_Appear(); // 注销观察者 Concrete_Event_Index->Delete_Observer_From_Container(people_2_index); // 事件出现 Concrete_Event_Index->Event_Type("a Cat "); //观察者被事件触发行为 Concrete_Event_Index->Event_Appear(); SAFE_DELETE(people_1_index); SAFE_DELETE(people_2_index); SAFE_DELETE(Concrete_Event_Index); getchar(); return 0;}
运行结果
阅读全文
0 0
- C++设计模式 -> 行为型 -> 观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式(行为型)之观察者模式(Observer Pattern)
- 行为型模式4:观察者模式(Observer Pattern)
- 23种设计模式(16)_行为型_观察者模式(Observer Pattern)
- "围观"设计模式(19)--行为型之观察者模式(Observer Pattern)
- [设计模式-行为型]观察者模式(Observer)
- Design Pattern(设计模式- 行为模式)-------Observer(观察者)
- 设计模式(4)-行为型-观察者模式(Observer)
- 观察者模式observer(行为型设计模式)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- Spring
- 《利用python进行数据分析》ch02续
- 模拟的操作系统nachos解读
- java HMACSHA1与php hash_hmac 函数
- 安装HBase出现的问题
- C++设计模式 -> 行为型 -> 观察者模式(Observer Pattern)
- 51nod-1179-最大的最大公约数
- Windows上安装Redis
- java夯实基础-多线程
- restful web service [helloworld] [intellij idea] [JavaEE5] [Maven] [Tomcat]
- 伪类before和after
- 五个简单的工具类
- android 简单的文字生成二维码
- ubuntu 使用笔记 :