网站建设制作方案企业网站模板
火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑:
状态设计
-
状态列表:
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