📄 subject.cpp
字号:
////////////////////////////////////////////////
// Filename: Subject.cpp
// Function:
// Author: ShaoxiongLi
// Date: 2008年8月28日
// Project: xxxMain
// Remarks:
// History:
////////////////////////////////////////////////
#include "stdafx.h"
#include "Observer.h"
#include "Subject.h"
// 构造函数
Subject::Subject( void ) : m_observers( NULL )
{
m_observers = new ObserverList( );
}
// 拷贝构造函数
Subject::Subject( const Subject & rhsSubject ) : m_observers( NULL )
{
m_observers = new ObserverList( );
}
// 析构函数
Subject::~Subject( void )
{
list< Observer * >::iterator it;
if ( !m_observers->empty( ) )
{
for ( it = m_observers->begin( ); it != m_observers->end( ); it++ )
{
// 通知观察者目标对象将析构
(*it)->SubjectDestructe( *this );
}
}
delete m_observers;
}
// 判断是否重复注册
bool Subject::RepeatAttach ( Observer & observer )
{
list< Observer * >::iterator it;
bool bRepeat = FALSE;
if ( &observer == NULL )
{
// 空观察者视为重复注册
bRepeat = TRUE;
}
else
{
bRepeat = FALSE;
}
// 判断是否重复注册
if ( !m_observers->empty( ) )
{
for ( it = m_observers->begin( ); it != m_observers->end( ) && ( !bRepeat ); it++ )
{
if ( (*it) == &observer )
{
bRepeat = TRUE;
}
}
}
return bRepeat;
}
// 增加观察者
void Subject::Attach( Observer & observer )
{
if ( !RepeatAttach( observer ) )
{
// 添加新观察者
m_observers->push_back( &observer );
// 通知观察者目标对象已添加
observer.SubjectNotify( *this );
}
}
// 删除观察者
void Subject::Detach( Observer & observer )
{
if ( &observer != NULL )
{
m_observers->remove( &observer );
}
}
// 通知观察者
void Subject::Notify( IN char * message, IN int msgLen )
{
list< Observer * >::iterator it;
if ( !m_observers->empty( ) )
{
for ( it = m_observers->begin( ); it != m_observers->end( ); it++ )
{
(*it)->Update( *this, message, msgLen );
}
}
}
// 通知观察者
void Subject::OnTimer( IN int nTimer )
{
list< Observer * >::iterator it;
bool recycle;
recycle = FALSE;
if ( !m_observers->empty( ) )
{
// 通知定时事件
for ( it = m_observers->begin( ); it != m_observers->end( ); it++ )
{
(*it)->OnTimer( *this, nTimer );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -