www.pudn.com > Observerwangdxh.zip > Subject.cpp


// Subject.cpp : implementation of the CSubject class 
// 
#include "stdafx.h" 
#include "Subject.h" 
 
CSubject::CSubject() 
{ 
} 
 
CSubject::~CSubject() 
{ 
	// Step 1 - Remove all the items for the observer list 
	m_ObserverList.RemoveAll(); 
} 
 
VOID CSubject::Attach( CObserver * pObserver ) 
{ 
	// Step 1 - Add the observer to the list 
	m_ObserverList.AddTail( pObserver ); 
} 
 
VOID CSubject::Detach( CObserver * pObserver ) 
{ 
	// Step 1 - Find and remove the observer from the list 
	POSITION Pos = m_ObserverList.Find( pObserver ); 
 
	if( Pos != NULL ) 
	{ 
		m_ObserverList.RemoveAt( Pos ); 
	} 
} 
 
VOID CSubject::Notify() 
{ 
	POSITION		Pos; 
	CObserver	* pObserver = NULL; 
 
	// Step 1 - Notify all the observers to update themselves 
	for( Pos = m_ObserverList.GetHeadPosition(); Pos != NULL; ) 
	{ 
		pObserver = ( CObserver * ) m_ObserverList.GetNext( Pos ); 
		pObserver->Update( this ); 
	} 
}