7 State

Davids 2025-08-10 05:16:12
Categories: > > Tags:

状态模式:
某些对象的状态变化,行为也会随之变化。运行时根据对象的状态来更改行为。
将所有与特定状态相关的行为,都放入一个State子对象,在对象状态切换时,切换为对应的子对象,同时维持对外接口,以达到状态与行为的解耦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class AbstractState {
protected:
AbstractState* m_Next;
public:
virtual void DoSomething() = 0;
virtual ~AbstractState() {}
AbstractState* GetNextState() { return m_Next; }
};

class StateA : public AbstractState {
private:
static AbstractState* m_Instance;
public:
static AbstractState* GetInstance();
virtual void DoSomething() override {
m_Next->DoSomething();
//状态切换,这部分是变化的。由各个子类自己实现。
m_Next = StateB::GetInstance();
}
};

class StateB : public AbstractState {
private:
static AbstractState* m_Instance;
public:
static AbstractState* GetInstance();
virtual void DoSomething() override {
//
m_Next->DoSomething();
}
};

class Processor {
private:
AbstractState* m_State;
public:
Processor(AbstractState* state) : m_State(state) {}
// 状态增加时,这部分是稳定的。
void DoSomething() {
m_State->DoSomething();
m_State = m_State->GetNextState();
}
};