⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c20-观察者模式.txt

📁 C++课件,很好用的,帮助大家学习C++.
💻 TXT
字号:
//观察者模式

class Observer;
class Subject 
{
public:
	virtual ~Subject();
	
	virtual void Attach(Observer *);
	virtual void Detach(Observer *);
	virtual void Notify();
protected:
	Subject();
private:
	List<Observer *> * _observers;
};

class ClockTimer:public Subject
{
public:
	ClockTimer();

	virtual int  GetHour();
	virtual int  GetMinute();
	virtual int  GetSecond();

	void Tick()
		{
			//update internal time-keeping state
			//...
			Notify();
		}
};

class Observer
{
public:
	virtual ~Observer;
	virtual void Update(SUbject * theChangedSubject)=0;
protected:
	Observer();
};

class DigitalClock:public WindowControl,public Observer
{
public:
	DigitalClock(ClockTimer * s) 
		{
		_subject=s;
		_subject->Attach(this);
		}

	virtual ~DigitalClock()
		{
		_subject->Detach(this);
		}

	virtual void Update(Subject * theChangedSubject)	
		//overrides Observer operation
		{
			if (theChangedSubject==_subject) {
				Draw();
			}
		}
	virtual void Draw();		
		//overrides WindowControl operation
		//define  how to draw the digital clock
		{ 
			int hour=_subject->GetHour();
			int minute=_subject->GetMinute();
			//ect
			
			//draw the digital clock
		}
private:
	ClockTimer * _subject;
};

class AnalogClick:public WindowControl,public Observer
{
public:
	AnalogCLock(ClockTimer *);
	virtual void Update(Subject *);
	virtual void Draw();
};

//代码:创建两个时钟,他们显示相同的时间
ClockTimer * timer=new ClockTimer;
AnalogClock * analogClock=new AnalogClock(timer);
AnalogClock * digitalClock=new DigitalClock(timer);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -