• 设计模式之观察者模式(Observer)


    观察者模式原理:当有新的消息产生时发送给观察者,和中介者模式的不同地方是中介者模式强调中介的作用以及中介双方的交互,观察者模式是主动调用观察者成员函数进行消息发送。

    代码如下:

    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    class Observer
    {
    public:
    	virtual void Update()
    	{
    		
    	}
    };
    
    class Blog
    {
    public: 
    	void attach(Observer *pobserver)
    	{
    		m_listObserver.push_back(pobserver);
    	}
    	void remove(Observer *pobserver)
    	{
    		m_listObserver.remove(pobserver);
    	}
    	
    	virtual void SetStatus(string s)
    	{
    		
    	}
    	virtual string GetStatus()
    	{
    		return m_status;
    	}
    	void Notify()
    	{
    		list<Observer*>::iterator iter = m_listObserver.begin();
    		for (;iter != m_listObserver.end();iter++)
    		{
    			(*iter)->Update();
    		}
    	}
    private:
    	list<Observer*> m_listObserver;
    protected:
    	string m_status;
    };
    
    
    
    class ObserverBlog:public Observer
    {
    public:
    	ObserverBlog(string name,Blog *blog): m_name(name), m_blog(blog) {}  
    
    	virtual void Update()
    	{
    		string status = m_blog->GetStatus();  
            cout<<m_name<<"-------"<<status<<endl; 
    	}
    private:
    	string m_name;
    	Blog *m_blog;
    };
    
    
    
    class BlogCSDN:public Blog
    {
    public:
    	BlogCSDN(string name):m_name(name){}
    	virtual void SetStatus(string s)
    	{
    		m_status = "CSDN通知:" + m_name + s ;
    		Notify();
    	}
    	virtual string GetStatus()
    	{
    		return m_status;
    	}
    private:
    	string m_name;
    };
    
    int main()
    {
    	Blog *pblog = new BlogCSDN("liuwei");
    	Observer *pobserver = new ObserverBlog("lin",pblog);
    	pblog->attach(pobserver);
    	pblog->SetStatus("发表了一篇新博客");
    	return 0;
    }
    
  • 相关阅读:
    学习MyBatis时报的错
    Day01
    PAT乙级01
    基于python-django框架的支付宝支付案例
    单线程与多线程的应用 --Python3
    Python异常 --Python
    有四个数字能组成多少个互不相同的三位数 --Python
    with as用法 --Python
    采用霍夫曼编码(Huffman)画出字符串各字符编码的过程并求出各字符编码 --多媒体技术与应用
    函数和代码复用 --Python
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3209557.html
Copyright © 2020-2023  润新知