即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

设计模式—观察者模式

编程语言 yinhua405 17℃ 0评论

观察者模式


又叫发布-订阅模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察,使它们能够自动更新自己。



#include

#include




using namespace std;





class Observer


{


    public:


        virtual void Update(){}


};





class Subject


{


    private:


        list m_observers;





    protected:


        string m_status;


    


    public:


        void Attach(Observer *observer)


        {


            m_observers.push_back(observer);


        }





        void Remove(Observer *observer)


        {


            m_observers.remove(observer);


        }





        void Notify()


        {


            list::iterator iter = m_observers.begin();


            for(;iter != m_observers.end();iter++)


            {


                (*iter)->Update();


            }


        }





        virtual void SetStatus(string s){}


        virtual string GetStatus(){}


};





class ConcreteSubject:public Subject


{





    public:


        void SetStatus(string s){m_status = s;}


        string GetStatus(){return m_status;}


};





class ConcreteObserver:public Observer


{


    private:


        string m_name;


        Subject *m_subject;


    public:


        ConcreteObserver(string name,Subject *sub):m_name(name),m_subject(sub){}


    


    void Update()


    {


        string status = m_subject->GetStatus();


        cout<

    }


};





int main()


{


    ConcreteSubject *s = new ConcreteSubject();


    s->SetStatus(“123”);





    s->Attach(new ConcreteObserver(“aa”,s));


    s->Attach(new ConcreteObserver(“bb”,s));


    s->Attach(new ConcreteObserver(“cc”,s));





    s->Notify();





    return 0;


}




转载请注明:CodingBlog » 设计模式—观察者模式

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情