C++ 设计模式 状态模式 demo
时间: 2023-05-26 20:04:39 浏览: 137
C++ 23种设计模式 demo
状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改変其行为。在状态模式中,对象将其状态封装在不同的类中,使其能够在运行时动态改变状态。
以下是一个状态模式的简单示例,演示了一个电梯的工作状态:
```C
#include <iostream>
using namespace std;
class ElevatorState {
public:
virtual void goUp() = 0;
virtual void goDown() = 0;
};
class StoppedState : public ElevatorState {
public:
void goUp() override;
void goDown() override {
cout << "Elevator goes down.\n";
}
};
class MovingState : public ElevatorState {
public:
void goUp() override {
cout << "Elevator goes up.\n";
}
void goDown() override {
cout << "Elevator goes down.\n";
}
};
class Elevator {
public:
Elevator() : state(new StoppedState) {}
void setState(ElevatorState* newState) {
state = newState;
}
void goUp() {
state->goUp();
}
void goDown() {
state->goDown();
}
private:
ElevatorState* state;
};
void StoppedState::goUp() {
cout << "Elevator goes up.\n";
}
int main() {
Elevator elevator;
elevator.goUp(); // Elevator goes up.
elevator.setState(new MovingState);
elevator.goUp(); // Elevator goes up.
elevator.goDown(); // Elevator goes down.
elevator.setState(new StoppedState);
elevator.goDown(); // Elevator goes down.
return 0;
}
```
在这个示例中,我们定义了两种电梯状态:StoppedState(停止状态)和MovingState(移动状态)。Elevator类维护一个当前状态的指针,并根据当前状态调用相应的方法。
我们可以看到,在执行Elevator::goUp()方法时,根据当前状态的不同,输出的结果也不同。当电梯处于StoppedState时,输出“Elevator goes up.”,而当电梯处于MovingState时,输出“Elevator goes down.”。
通过使用状态模式,我们可以很容易地改变电梯的状态,并且可以轻松地添加新的状态。这种模式使代码更容易维护,并且使其更具可扩展性。
阅读全文