状态模式:
某些对象的状态变化,行为也会随之变化。运行时根据对象的状态来更改行为。
将所有与特定状态相关的行为,都放入一个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(); } };
|