发布订阅者模式c++实现
2011-11-06 20:27
856 查看
#ifndef BOTTON_H
#define BOTTON_H
#include <string>
#include <vector>
class BottonListener;
class Botton
{
public:
Botton(const std::string & botton_name);
~Botton();
const std::string & GetName() const;
void AddBottonListener(BottonListener * botton_listener);
void RemoveBottonListenner(BottonListener * botton_listener);
void Run();
private:
typedef std::vector<BottonListener*>::iterator ITER;
std::string name_;
std::vector<BottonListener*> listener_vector_;
};
#endif/*BOTTON_H*/
#ifndef BOTTON_LISTENER_H
#define BOTTON_LISTENER_H
class Botton;
class BottonListener
{
public:
BottonListener();
virtual ~BottonListener();
virtual void BottonClick(Botton * botton) = 0;
};
#endif/*BOTTON_LISTENER_H*/
#ifndef MY_BOTTON_LISTENER_H
#define MY_BOTTON_LISTENER_H
#include "botton_listener.h"
#include "botton.h"
class MyBottonListener : public BottonListener
{
public:
MyBottonListener(int number);
~MyBottonListener();
void BottonClick(Botton * botton);
private:
int number_;
};
#endif/*MY_BOTTON_LISTENER_H*/
#include "botton_listener.h"
#include "botton.h"
Botton::Botton(const std::string &botton_name) : name_(botton_name)
{
}
Botton::~Botton()
{
}
const std::string & Botton::GetName() const
{
return this->name_;
}
void Botton::AddBottonListener(BottonListener * botton_listener)
{
this->listener_vector_.push_back(botton_listener);
}
void Botton::RemoveBottonListenner(BottonListener * botton_listener)
{
bool key = false;
ITER iter;
for(iter = listener_vector_.begin();iter != listener_vector_.end();iter++)
{
if(*iter == botton_listener )
{
key = true;
break;
}
}
if(key)
{
listener_vector_.erase(iter);
}
}
void Botton::Run()
{
for(ITER iter = listener_vector_.begin(); iter != listener_vector_.end(); iter++)
{
BottonListener * p_botton_listener = *iter;
p_botton_listener->BottonClick(this);
}
}
#include "botton_listener.h"
BottonListener::BottonListener()
{
}
BottonListener::~BottonListener()
{
}
#include <iostream>
#include "my_botton_listener.h"
MyBottonListener::MyBottonListener(int number) : number_(number)
{
}
MyBottonListener::~MyBottonListener()
{
}
void MyBottonListener::BottonClick(Botton *botton)
{
std::cout<<botton->GetName()<<" "<<number_<<std::endl;
}
#include "botton_listener.h"
#include "botton.h"
#include "my_botton_listener.h"
int main(int argc,char **argv)
{
Botton *botton = new Botton("Hello!");
BottonListener *botton_listener_1 = new MyBottonListener(1);
BottonListener *botton_listener_2 = new MyBottonListener(2);
botton->AddBottonListener(botton_listener_1);
botton->AddBottonListener(botton_listener_2);
botton->Run();
botton->RemoveBottonListenner(botton_listener_1);
botton->RemoveBottonListenner(botton_listener_2);
delete botton;
delete botton_listener_1;
delete botton_listener_2;
}
#define BOTTON_H
#include <string>
#include <vector>
class BottonListener;
class Botton
{
public:
Botton(const std::string & botton_name);
~Botton();
const std::string & GetName() const;
void AddBottonListener(BottonListener * botton_listener);
void RemoveBottonListenner(BottonListener * botton_listener);
void Run();
private:
typedef std::vector<BottonListener*>::iterator ITER;
std::string name_;
std::vector<BottonListener*> listener_vector_;
};
#endif/*BOTTON_H*/
#ifndef BOTTON_LISTENER_H
#define BOTTON_LISTENER_H
class Botton;
class BottonListener
{
public:
BottonListener();
virtual ~BottonListener();
virtual void BottonClick(Botton * botton) = 0;
};
#endif/*BOTTON_LISTENER_H*/
#ifndef MY_BOTTON_LISTENER_H
#define MY_BOTTON_LISTENER_H
#include "botton_listener.h"
#include "botton.h"
class MyBottonListener : public BottonListener
{
public:
MyBottonListener(int number);
~MyBottonListener();
void BottonClick(Botton * botton);
private:
int number_;
};
#endif/*MY_BOTTON_LISTENER_H*/
#include "botton_listener.h"
#include "botton.h"
Botton::Botton(const std::string &botton_name) : name_(botton_name)
{
}
Botton::~Botton()
{
}
const std::string & Botton::GetName() const
{
return this->name_;
}
void Botton::AddBottonListener(BottonListener * botton_listener)
{
this->listener_vector_.push_back(botton_listener);
}
void Botton::RemoveBottonListenner(BottonListener * botton_listener)
{
bool key = false;
ITER iter;
for(iter = listener_vector_.begin();iter != listener_vector_.end();iter++)
{
if(*iter == botton_listener )
{
key = true;
break;
}
}
if(key)
{
listener_vector_.erase(iter);
}
}
void Botton::Run()
{
for(ITER iter = listener_vector_.begin(); iter != listener_vector_.end(); iter++)
{
BottonListener * p_botton_listener = *iter;
p_botton_listener->BottonClick(this);
}
}
#include "botton_listener.h"
BottonListener::BottonListener()
{
}
BottonListener::~BottonListener()
{
}
#include <iostream>
#include "my_botton_listener.h"
MyBottonListener::MyBottonListener(int number) : number_(number)
{
}
MyBottonListener::~MyBottonListener()
{
}
void MyBottonListener::BottonClick(Botton *botton)
{
std::cout<<botton->GetName()<<" "<<number_<<std::endl;
}
#include "botton_listener.h"
#include "botton.h"
#include "my_botton_listener.h"
int main(int argc,char **argv)
{
Botton *botton = new Botton("Hello!");
BottonListener *botton_listener_1 = new MyBottonListener(1);
BottonListener *botton_listener_2 = new MyBottonListener(2);
botton->AddBottonListener(botton_listener_1);
botton->AddBottonListener(botton_listener_2);
botton->Run();
botton->RemoveBottonListenner(botton_listener_1);
botton->RemoveBottonListenner(botton_listener_2);
delete botton;
delete botton_listener_1;
delete botton_listener_2;
}
相关文章推荐
- 发布订阅者模式C++实现
- 发布订阅者模式之C#委托实现
- 订阅发布模式——C++实现
- 发布订阅者模式之C#委托实现
- ActiveMQ 快速入门教程系列 第二章 发布-订阅者模式实现
- 设计模式--中介者模式C++实现
- 设计模式C++实现二:策略模式
- 设计模式C++实现:单例模式(Singleton)
- 设计模式C++实现(1)——工厂模式
- 利用桥接模式实现手机品牌和手机软件之间的解耦 C++
- 设计模式C++实现(1)——工厂模式
- 设计模式C++实现(11)——装饰模式
- 设计模式C++实现:门面模式
- 设计模式C++实现(1)——工厂模式
- 最常用的设计模式---外观模式(C++实现)
- 代理模式 C++ 实现
- C++实现工厂模式
- 设计模式C++实现(2)——策略模式
- 设计模式--抽象工厂模式(C++实现)
- 设计模式C++实现(15)——观察者模式