前一篇文章中,设计了一个关于指挥灯的工作流程,采用的是 State 模式,但 Red,Green, Blue 三种状态反复的转换,每转换一次,则重新动态生成一种新的状态,浪费了大量的时间和空间。因此,在 ControlMachine 类中提前将三种状态生成,每需要生成一种新的状态时候,只需要引用提前生成的状态即可。
ControlMachine.h 源文件如下:
#ifndef _CONTROL_MACHINE_H_
#define _CONTROL_MACHINE_H_
#include "Light.h"

class Light;
class RedLight;
class GreenLight;
class BlueLight;

class ControlMachine

...{
public:
ControlMachine(Light *light);
void SetLight(Light *light);
void Push();
void Output();

RedLight *redLight;
GreenLight *greenLight;
BlueLight *blueLight;
~ControlMachine();
private:
Light* _light;
};
#endif
Light.cpp 源文件如下:

void RedLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->greenLight);
}


void GreenLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->blueLight);
}


void BlueLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->redLight);
}
ControlMachine.cpp 源文件如下:
ControlMachine::ControlMachine(Light *light)

...{
_light=light;
redLight=new RedLight();
greenLight=new GreenLight();
blueLight=new BlueLight();

}

ControlMachine::~ControlMachine()

...{
delete redLight;
delete blueLight;
delete greenLight;
}
ControlMachine.h 源文件如下:
#ifndef _CONTROL_MACHINE_H_
#define _CONTROL_MACHINE_H_
#include "Light.h"
class Light;
class RedLight;
class GreenLight;
class BlueLight;
class ControlMachine
...{
public:
ControlMachine(Light *light);
void SetLight(Light *light);
void Push();
void Output();
RedLight *redLight;
GreenLight *greenLight;
BlueLight *blueLight;
~ControlMachine();
private:
Light* _light;
};
#endifLight.cpp 源文件如下:

void RedLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->greenLight);
}

void GreenLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->blueLight);
}

void BlueLight::Push(ControlMachine *ctrl)...{
ctrl->SetLight(ctrl->redLight);
}ControlMachine.cpp 源文件如下:
ControlMachine::ControlMachine(Light *light)
...{
_light=light;
redLight=new RedLight();
greenLight=new GreenLight();
blueLight=new BlueLight();
}
ControlMachine::~ControlMachine()
...{
delete redLight;
delete blueLight;
delete greenLight;
}
4098

被折叠的 条评论
为什么被折叠?



