美文网首页
观察者模式 C++实现

观察者模式 C++实现

作者: 假程序员 | 来源:发表于2019-03-13 23:10 被阅读0次
    //
    //  main.cpp
    //  observer_pattern
    //
    //  Created by apple on 2019/3/13.
    //  Copyright © 2019年 apple. All rights reserved.
    //
    
    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    
    class IObserver
    {
    public:
        virtual ~IObserver() {}
        int num;
        IObserver(string name){this->num = 0;this->name = name;}
        string name;
        virtual void up() = 0;
    };
    class Observer:public IObserver
    {
    public:
        Observer(string name):IObserver(name){}
        void up(){this->num++;}
    };
    class ISubject
    {
    public:
        list<IObserver *> observers;
        virtual void register_observer(IObserver *) = 0;
        virtual void remove_observer(IObserver *) = 0;
        virtual void clear_observer() = 0;
        virtual void test() = 0;
        virtual ~ISubject()
        {
            while (!observers.empty()) {
                cout<<"delete "<<observers.front()->name<<endl;
                IObserver *temp = observers.front();
                observers.pop_front();
                delete temp;
            }
        }
    };
    class Subject:public ISubject
    {
    public:
        void register_observer(IObserver *observer){this->observers.push_back(observer);}
        void remove_observer(IObserver *observer){this->observers.remove(observer);}
        void clear_observer(){this->observers.clear();}
        void test()
        {
            list<IObserver *>::iterator temp;
            for (temp = this->observers.begin() ; temp != observers.end(); ++temp) {
                (*temp)->up();
                cout<<(*temp)->name<<":"<<(*temp)->num<<endl;
            }
        }
    };
    
    int main(int argc, const char * argv[]) {
        Subject subject;
        IObserver *observer = new Observer("A");
        subject.register_observer(observer);
        observer->up();
        subject.register_observer(new Observer("B"));
        subject.register_observer(new Observer("C"));
        subject.test();
        return 0;
    }
    
    A:2
    B:1
    C:1
    delete A
    delete B
    delete C
    Program ended with exit code: 0
    

    相关文章

      网友评论

          本文标题:观察者模式 C++实现

          本文链接:https://www.haomeiwen.com/subject/lnaxmqtx.html