You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.3 KiB
C++
74 lines
1.3 KiB
C++
/**
|
|
* @file WSubject.h
|
|
* @brief 目标(观察者模式)
|
|
* @author 沙漠乌鸦
|
|
* @time 2010-01-18
|
|
*/
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
namespace wuya
|
|
{
|
|
|
|
class WObserver;
|
|
|
|
typedef std::vector<WObserver*> 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;
|
|
}
|
|
|
|
}
|