美文网首页
设计模式3--observer(观察者模式)

设计模式3--observer(观察者模式)

作者: _codelover | 来源:发表于2018-02-13 18:57 被阅读0次

    observer(观察者模式)

    观察者模式主要解决的问题是:

    • 多个类对同一个数据的关注

    适用于:

    • 一个数据的多种展示方式
    • 进度条

    • observer.png

    观察者接口定义

    /**
     * 观察者接口
     */
    class observerInterface
    {
    public:
        virtual void showData(int n)=0;
        ~observerInterface(){}
    };
    

    观察者实现1

    /**
     * 观察者1
     */
    class observerOne : public observerInterface
    {
    public:
        virtual void showData(int n)
        {
            cout<<"观察者1被通知,数据"<<n<<endl;
        }
    };
    

    观察者实现2

    /**
     * 观察者2
     */
    class observerTwo : public observerInterface
    {
    public:
        virtual void showData(int n)
        {
            cout<<"观察者2被通知,数据"<<n<<endl;
    
        }
    };
    

    模拟进度条数据通知观察者

    /**
     * 进度条
     */
    class dataDeal
    {
    protected:
        //所有观察者
        std::list<observerInterface*> observers;
    public:
        void dealData()
        {
            for(int i=0; i<5; i++)
            {
                //通知所有观察者
                tellObserver(i);
            }
        }
        void addObserver(observerInterface* ob)
        {
            observers.push_back(ob);
        }
        void removeObserver(observerInterface* ob)
        {
            observers.remove(ob);
        }
        void tellObserver(int i)
        {
            for(auto p : observers)
            {
                p->showData(i);
            }
        }
    };
    

    测试

    #include <iostream>
    #include <list>
    using namespace std;
    int main(int argc, char const *argv[]) {
        dataDeal* dp = new dataDeal();
        dp->addObserver(new observerOne());
        dp->addObserver(new observerTwo());
        dp->dealData();
        return 0;
    }
    
    
    observer.png

    相关文章

      网友评论

          本文标题:设计模式3--observer(观察者模式)

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