// // Created by 29019 on 2019/12/21. // #ifndef GENERAL_OBSERVER_H #define GENERAL_OBSERVER_H #include #include template class Observer; template class Observed{ public: virtual ~Observed(){}; virtual int AddObserver(Observer *); // 添加观察者 virtual int DeleteObserver(Observer *); // 删除观察者 virtual int NoticeObserver(T *); protected: std::vector*> m_vObservers; }; template class Observer { public: virtual void OnNotifyData(T* ){}; private: }; template int Observed::AddObserver(Observer *p) { if(nullptr == p){ return -1; } for(typename std::vector*>::iterator itr = m_vObservers.begin(); itr != m_vObservers.end();itr++){ if(((Observer*)*itr) == p){ return 0; } } this->m_vObservers.push_back(p); return 0; } template int Observed::DeleteObserver(Observer *p) { for(typename std::vector*>::iterator itr = m_vObservers.begin(); itr != m_vObservers.end();itr++){ if(((Observer*)*itr) == p){ return 0; } } return 0; } template int Observed::NoticeObserver(T *p) { if(nullptr == p){ return -1; } for(typename std::vector*>::iterator itr = m_vObservers.begin(); itr != m_vObservers.end();itr++){ ((Observer*)*itr)->OnNotifyData(p); } return 0; } #endif //GENERAL_OBSERVER_H