火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑:
状态设计
状态列表:
IdleState
(待机)PreparingState
(准备)LaunchingState
(发射中)FirstStageSeparatingState
(一级分离)SecondStageSeparatingState
(二级分离)ThirdStageSeparatingState
(三级分离)OrbitingState
(轨道运行)ReturnPreparingState
(返航准备)ReturningState
(返航中)EmergencyState
(紧急状态)LandedState
(着陆)
状态转换图:
Idle → Preparing → Launching → FirstStageSeparating → SecondStageSeparating → ThirdStageSeparating → Orbiting ↑ | | | | | ↓ | | | | └─── EmergencyState ←───┘ | | ↓ ↓ ↓ ↓ └── LandedState ←─ Returning ←─ ReturnPreparing ←──────────────────────────────────────────────┘
完整代码实现
#include <iostream>
#include <memory>
#include <stdexcept>
class Rocket;
// 抽象状态基类
class RocketState {
public:
virtual void StartPreparation(Rocket& rocket) {
Error("准备"); }
virtual void StartLaunch(Rocket& rocket) {
Error("发射"); }
virtual void SeparateStage(Rocket& rocket) {
Error("分离"); }
virtual void EnterOrbit(Rocket& rocket) {
Error("入轨"); }
virtual void ReturnToEarth(Rocket& rocket) {
Error("返航"); }
virtual void HandleEmergency(Rocket& rocket) {
Error("紧急处理"); }
virtual void Land(Rocket& rocket) {
Error("着陆"); }
virtual ~RocketState() = default;
protected:
void Error(const std::string& action) {
std::cout << "[Error] 当前状态不支持 " << action << " 操作!\n";
}
};
// ---------- 具体状态类 ----------
class IdleState : public RocketState {
public:
void StartPreparation(Rocket& rocket) override;
};
class PreparingState : public RocketState {
public:
void StartLaunch(Rocket& rocket) override;
void HandleEmergency(Rocket& rocket) override;
};
class LaunchingState : public