找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 180|回复: 0

观察者模式-Observer

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-9 13:41:37 | 显示全部楼层 |阅读模式
今天两点感悟:

1、代码尽量不要拷贝,能自己敲的就自己敲吧。这样的好处最明显的地方就是加深理解记忆,以后面试的时候不至于我知道在哪里,但是回答不上来。

2、多写东西,自己的东西,不要拷贝,自己怎么理解的就怎么写。那是自己的,不是别人的。

观察者模式-Oberver

说明:当被观察者Obervenber的属性改变时,通知观察者,this(被观察者)的值改变了。



观察者代码

class CObserver {
public:
    CObserver();
    virtual ~CObserver();
    virtual void Update(CObservable* pObservable);
private:

};
被观察者

class CObservable {
public:
    CObservable();
    virtual ~CObservable();
    void Notiy();
    void RegisterObserver(CObserver* pObserver);
    void UnRegisterObserver(CObserver* pObserver);
private:
    list<CObserver*> m采用listObserverPtr;
};
CObservable::CObservable() {
    m采用listObserverPtr.clear();
}

CObservable::~CObservable() {
    m采用listObserverPtr.clear();
}

void CObservable::Notiy()
{
    list<CObserver*>::iterator it;
    for(it = m采用listObserverPtr.begin();it != m采用listObserverPtr.end();it++)
    {
        (*it)->Update(this);
    }
}
void CObservable::RegisterObserver(CObserver* pObserver)
{
    if(pObserver)
    {
        m采用listObserverPtr.push采用back(pObserver);
    }
}
void CObservable::UnRegisterObserver(CObserver* pObserver)
{
    list<CObserver*>::iterator it;
    for(it = m采用listObserverPtr.begin();it != m采用listObserverPtr.end();)
    {
        if(pObserver == *it)
        {
            m采用listObserverPtr.erase(it);
        }
        else
        {
           it++;
        }
    }
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 13:51 , Processed in 0.129798 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表