前一篇文章中,设计了一个关于指挥灯的工作流程,采用的是 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;
}

437

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



