博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ 观察者模式
阅读量:5924 次
发布时间:2019-06-19

本文共 1525 字,大约阅读时间需要 5 分钟。

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 }

本文转自博客园知识天地的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
一些内置方法的使用,一个惊艳的小程序,内置方法的一些使用
查看>>
OC基础第二讲
查看>>
Angular js ie 7,8 兼容性
查看>>
CentOS-用户的管理
查看>>
ruby代码重构第一课
查看>>
Pandas Installation
查看>>
关于有些.aidl源码的eclipse编译后生成.java文件的错
查看>>
K-Means 算法
查看>>
比幅测向及圆锥效应
查看>>
background-position用法详解
查看>>
剑与魔法
查看>>
利用gearman同步mysql数据到redis
查看>>
HDU-1325-Is It A Tree?(并查集+有向树)
查看>>
题目1005:Graduate Admission
查看>>
java.util.vector中的vector的详细用法
查看>>
configparser logging collections 模块
查看>>
初学集合,以及泛型
查看>>
三亚之行杂记
查看>>
Ubuntu 12.04 笔记本触摸板失灵解决方法
查看>>
[Windows Azure] How to Scale an Application
查看>>