• c++ 观察者模式


    [代码] 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 }
  • 相关阅读:
    boost库:函数对象
    boost库:智能指针
    linux 查看和修改文件时间
    linux正则表达式
    UVA
    UVA
    UVA
    UVA
    UVA
    对JavaScript的认识?
  • 原文地址:https://www.cnblogs.com/mfryf/p/2465049.html
Copyright © 2020-2023  润新知