今天两点感悟:
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++; } } }