/** * @file WSubject.h * @brief 目标(观察者模式) * @author 沙漠乌鸦 * @time 2010-01-18 */ #pragma once #include namespace wuya { class WObserver; typedef std::vector ObserverVector; class AFX_EXT_CLASS WSubject { public: WSubject(void); virtual ~WSubject(void); /** @brief 连接Observer */ virtual void Attach(WObserver* pObserver); /** @brief 取消Observer连接 */ virtual void Detach(WObserver* pObserver); /** * @brief 通知所有Observer进行状态更新 */ virtual void Notify(ULONGLONG ullTime); /** * @brief 判断是否有观察者观察目标 */ BOOL HasObserver(); /** @brief 更新时是否通知观察者 */ void SetNotify(BOOL bNotify); BOOL GetNotify(); /** @brief 时间戳 */ ULONGLONG GetTimeStampSubject() const; void SetTimeStampSubject(ULONGLONG ullTime); private: ObserverVector m_vectorpObserver; ULONGLONG m_ullTimeSubject; ///< 时间戳 BOOL m_bNotify; ///< 是否通知观察者更新 }; inline void WSubject::SetNotify(BOOL bNotify) { this->m_bNotify = bNotify; } inline BOOL WSubject::GetNotify() { return m_bNotify; } inline ULONGLONG WSubject::GetTimeStampSubject() const { return m_ullTimeSubject; } inline void WSubject::SetTimeStampSubject(ULONGLONG ullTime) { this->m_ullTimeSubject = ullTime; } }