观察者模式C++实现

观察者模式

如果你能理解委托,那么观察者模式对你来说很简单。委托,就是在一个类A里包含另一个类B的对象的指针作为本类的数据成员。因此此类A就有了调用类B里函数成员的能力。观察者模式的本质就是托管。在代码中可以清楚看到这些。下面的案例中主体(相当类A)添加了list链表来存储多个来自观察者类(相当于类B)的对象实例的指针。

Exe : Observer.o
	g++ -o Exe Observer.o
main.o : Observer.cpp
	g++ -g -c Observer.cpp
clean :
	rm Observer
#include <iostream>
#include <string>
#include <list>
using namespace std;


class Observer
{
    
    
public:
    bool bool_state = false;
    void change_state();
};
void Observer::change_state()
{
    
    
    cout << "before change Observer state : " << bool_state << endl;
    bool_state = bool_state ? false : true;
    cout << "after change Observer state : " << bool_state << endl;
}

class Object
{
    
    
public:
    list<Observer*> Observer_list;
    bool bool_state = false;
    void add_list(Observer* ptr);
    void delete_list(Observer* ptr);
    void notice();
    void change_state();
};

void Object::add_list(Observer* ptr)
{
    
    
    Observer_list.push_back(ptr);
}

void Object::delete_list(Observer* ptr)
{
    
    
    Observer_list.remove(ptr);
}

void Object::notice()
{
    
    
    for(list<Observer*>::iterator iter = Observer_list.begin(); iter != Observer_list.end(); iter++)
    {
    
    
        (*iter)->change_state();
    }
}
void Object::change_state()
{
    
    
    cout << "before change Object state : " << bool_state << endl;
    bool_state = bool_state ? false : true;
    cout << "after change Object state : " << bool_state << endl;

    notice();
}



int main(void)
{
    
    
    Observer* p_Observer = new Observer;
    Observer* p_Observer_2 = new Observer;
    Object* p_Object = new Object;
    p_Object->add_list(p_Observer);
    p_Object->add_list(p_Observer_2);
    p_Object->change_state();

    delete p_Object;
    delete p_Observer;
    delete p_Observer_2;
    return 0;
}

哎呦喂ヾ(✿゚▽゚)ノ~路长馆小,雪轻帘薄,酒热乎,这位爷~您ヾ(✿゚▽゚)ノ~ 里面坐~
本公众号专注分享C++,ffmpeg,opencv等相关音视频知识
webrtc,udp,tcp,rtsp,rtmp,srt/nginx+rtmp等流媒体协议和服务器
同时也会有大厂音视频技术专家不定期直播分享…
国人开发流媒体srs服务器,及yangrtc(国人版的webrtc)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/121485681