此为设计模式第九谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:状态模式的本质,根据状态来分离和选择行为。
分:
1、老规则,打开VS创建一个控制台应用
2、实现编码,这里以旅游出行的例子来辅助讲解状态模式
2.1 上下文(Context):拥有状态的对象
2.2 抽象状态类:定义了一个接口
2.3 具体状态类:步行、自行车、公交车
2.4 输出顺序“步行中”->“骑自行车中”->“乘坐公共交通中”
#include <iostream>
using namespace std;
// 状态接口
class TravelState {
public:
virtual void Travel(Context* pContext) = 0;
};
// 上下文
class Context {
public:
void Travel() {
if (pState) {
pState->Travel(this);
}
}
void ChangeState(TravelState* p) {
if (pState)
delete pState;
pState = p;
}
private:
TravelState* pState;
};
// 具体状态类
class WalkingState : public TravelState {
public:
void Travel(Context* pContext) override {
cout << "步行中..." << endl;
// 假设在某些条件下,状态改变
pContext->ChangeState(new BikeState());
}
};
class BikeState : public TravelState {
public:
void Travel(Context* pContext) override {
cout << "骑自行车中..." << endl;
// 状态改变
pContext->ChangeState(new PublicTransportState());
}
};
class PublicTransportState : public TravelState {
public:
void Travel(Context* pContext) override {
cout << "乘坐公共交通中..." << endl;
// 状态改变
pContext->ChangeState(new WalkingState());
}
};
int main() {
Context* pcontext = new Context(new WalkingState());
for (int i = 0; i < 3; ++i) {
pcontext->Travel();
cout << endl;
}
return 0;
}