您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 3浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

设计模式-行为-观察者

phymat.nico 发布时间:2017-10-07 20:27:47 ,浏览量:3

#pragma once

#ifndef OBSERVER_H 

#define OBSERVER_H 
#include  

typedef int STATE; 

class Observer; 

//发布者
// Subject 抽象基类,只需要知道Observer 基类的声明就可以了 
class Subject 
{ 
public: 
	Subject() : m_nSubjectState(-1){} 
	virtual ~Subject(); 
	void Notify();                   // 通知对象改变状态 
	void Attach(Observer *pObserver);       // 新增对象 
	void Detach(Observer *pObserver);        // 删除对象 

	// 虚函数,提供默认的实现,派生类可以自己实现来覆 基类的实现 
	virtual void  SetState(STATE nState);    // 设置状态 
	virtual STATE   GetState();      // 得到状态 

protected: 
	STATE m_nSubjectState;                 // 模拟保存Subject 状态的变量 
	std::list    m_ListObserver;    // 保存Observer 指针的链表 
}; 

// ConcreateSubject 类,派生在Subject 类 
class ConcreateSubject : public Subject 
{ 
public: 
	ConcreateSubject() : Subject(){} 
	virtual ~ConcreateSubject(){} 

	// 派生类自己实现来覆 基类的实现 
	virtual void   SetState(STATE nState);     // 设置状态 
	virtual STATE    GetState();       // 得到状态 
}; 

//订阅者
// Observer 抽象基类 
class Observer 
{ 
public: 
	Observer() : m_nObserverState(-1){} 
	virtual ~Observer(){} 

	// 纯虚函数,各个派生类可能有不同的实现 
	// 通知Observer 状态发生了变化 
	virtual void Update(Subject* pSubject) = 0; 

protected: 
	STATE m_nObserverState; // 模拟保存Observer 状态的变量 
}; 
// ConcreateObserver 类派生自Observer 
class ConcreateObserver : public Observer 
{ 
public: 
	ConcreateObserver() : Observer(){} 
	virtual ~ConcreateObserver(){} 

	// 虚函数,实现基类提供的接口 
	virtual void Update(Subject* pSubject); 
}; 

#endif 
#include "StdAfx.h"
#include "observer_impl.h"

#include  
#include  
/* ---------------------- 
|   Subject 类成员函数的实现 
| 
-*/ 
void Subject::Attach(Observer *pObserver) 
{ 
	std::cout             
关注
打赏
1659628745
查看更多评论
0.1328s