实现C++ 观察者模式

class Observer{
public:
    Observer(int id):m_id(id){};
    void obPirnt(){
        cout << "obj " << m_id << " find change!" << endl;
    }
private:
    int m_id;
};
class Sub{
public:
    void insert(Observer& obj){
        m_list.push_back(obj);
    }

    void change(int x){
        cout << "sub change : " << x << endl;
        broadcast();
    }
    void broadcast(){
        int len = m_list.size();
        if(len == 0) return;
        auto it = m_list.begin();
        for(int i = 0; i < len; i++){
            it->obPirnt();
            it++;
        }
    }
private:
    list<Observer> m_list;
};

测试程序:

int main() {
    Observer o1(1),o2(2),o3(3);
    Sub sub;
    sub.insert(o1);sub.insert(o2);sub.insert(o3);
    sub.change(1);
    return 0;
}

输出结果:

posted @ 2022-02-08 20:06  子于舟  阅读(34)  评论(0)    收藏  举报