📄 c20-观察者模式.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 + -