c++ 观察者模式

简介:
01 #include <iostream>
02 #include <string>
03 #include <vector>
04 #include <algorithm>
05 using namespace std;
06  
07 class button;
08  
09 struct button_listener{
10     button_listener(){}
11     virtual ~button_listener(){}
12     virtual void  button_clicked(button* btn)=0;
13 };
14  
15 class button{
16     private:
17         vector<button_listener*> listeners;
18         typedef vector<button_listener*>::iterator bit_type;
19         string name;
20     public:
21         string get_name(){return name;};
22         button(string n):name(n){}
23         ~button(){}
24         void add_button_listener(button_listener* bls){
25             listeners.push_back(bls);
26         }
27         void remove_button_listener(button_listener* bls){
28             listeners.erase(remove(
29                         listeners.begin(),listeners.end(),bls),
30                     listeners.end());
31         }
32         void run(){
33             for(bit_type it=listeners.begin();it!=listeners.end();++it){
34                 button_listener* bls = *it;
35                 bls->button_clicked(this);
36             }
37         }
38 };
39  
40  
41 class my_button_listener:public button_listener{
42 private:
43     int i;
44 public:
45     my_button_listener(int ii):i(ii){}
46     void button_clicked(button* btn){
47         cout<<btn->get_name()<<" "<<i<<endl;
48     }
49 };
50  
51 int main(){
52     button* btn = new button("nihao");
53     button_listener* bls1 = new my_button_listener(1);
54     button_listener* bls2 = new my_button_listener(2);
55      
56     btn->add_button_listener(bls1);
57     btn->add_button_listener(bls2);
58     btn->run();
59  
60     btn->remove_button_listener(bls1);
61     btn->run();
62  
63     delete btn;
64     delete bls1;
65     delete bls2;
66     return 0;
67 }

本文转自博客园知识天地的博客,原文链接:c++ 观察者模式,如需转载请自行联系原博主。

相关文章
|
5月前
|
消息中间件 设计模式 存储
C++观察者模式探索:从设计到应用,一站式全面解析
C++观察者模式探索:从设计到应用,一站式全面解析
262 1
|
5月前
|
消息中间件 缓存 监控
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
【C++ 观察者模式的应用】跨进程观察者模式实战:结合ZeroMQ和传统方法
225 1
|
5月前
|
C++
【C++】—— 观察者模式
【C++】—— 观察者模式
|
12月前
|
设计模式 C++
[学习][笔记]设计模式(基于C/C++实现)<二>观察者模式
[学习][笔记]设计模式(基于C/C++实现)<二>观察者模式
|
设计模式 C++
C++实现设计模式之观察者模式
什么是观察者模式? 观察者模式是一种一对多的以来关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并被自动更新。它的主体是通知的发布者,发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知,将观察者和被观察的对象分离开。
|
设计模式 C++ 容器
【设计模式学习笔记】中介者模式、观察者模式、备忘录模式案例详解(C++实现)
【设计模式学习笔记】中介者模式、观察者模式、备忘录模式案例详解(C++实现)
339 0
【设计模式学习笔记】中介者模式、观察者模式、备忘录模式案例详解(C++实现)
|
设计模式 C++
[学习][笔记]设计模式(基于C/C++实现)<二>观察者模式
设计模式(基于C/C++实现)<二>观察者模式
133 0