/** * @name 状态模式 * @brief: 允许对象在内部状态改变时改变行为 * @note 场景:订单状态机、游戏角色状态、电梯控制 */ class OrderState { public: virtual void shipOrder(Order* order) = 0; virtual void cancelOrder(Order* order) = 0; }; class NewState : public OrderState { void shipOrder(Order* order) override {}; void cancelOrder(Order* order) override {}; }; class ShippedState : public OrderState { void shipOrder(Order* order) override { /* 已发货,不可重复操作 */ } void cancelOrder(Order* order) override { /* 已发货不可取消 */ } }; class Order { public: Order() : state(new NewState()) {} void ship() { state->shipOrder(this); } void cancel() { state->cancelOrder(this); } void changeState(OrderState* newState) { delete state; state = newState; } private: OrderState* state; }; // 状态转换实现 void NewState::shipOrder(Order* order) { // 发货逻辑... order->changeState(new ShippedState()); }