c20-

来自「C++面向对象课程设计课件」· 代码 · 共 92 行

TXT
92
字号
//观察者模式

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 + =
减小字号Ctrl + -
显示快捷键?