澄海网站建设,ui设计一个页面多少钱,网站开发的案例分析模板,无法运行电脑wordpress文章目录 概述定义结构图 2.代码示例小结 概述
定义
状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为。 对象看起来似乎修改了它的类。
状态模式就是用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.。状态模式将一个对象的状态… 文章目录 概述定义结构图 2.代码示例小结 概述
定义
状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为。 对象看起来似乎修改了它的类。
状态模式就是用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中(用类来表示状态) ,使得对象状态可以灵活变化。
结构图 上下文信息类Context实际上就是存储当前状态的类对外提供更新状态的操作。在该类中维护着一个抽象状态接口State实例,这个实例定义当前状态. 抽象状态类State可以是一个接口或抽象类用于定义声明状态更新的操作方法有哪些,具体实现由子类完成。 具体状态类StateA 等实现抽象状态类定义的方法根据具体的场景来指定对应状态改变后的代码实现逻辑。
2.代码示例
// 抽象状态类
class State {
public:virtual void Handle(std::string input, std::shared_ptrState currentState) 0;
};// 具体状态A
class StateA : public State {
public:void Handle(std::string input, std::shared_ptrState currentState) override {if (input A) {std::cout StateA: Handle input A. std::endl;} else if (input B) {std::cout StateA: Transition to StateB. std::endl;currentState std::make_sharedStateB();} else {std::cout StateA: Invalid input. std::endl;}}
};// 具体状态B
class StateB : public State {
public:void Handle(std::string input, std::shared_ptrState currentState) override {if (input B) {std::cout StateB: Handle input B. std::endl;} else if (input C) {std::cout StateB: Transition to StateC. std::endl;currentState std::make_sharedStateC();} else {std::cout StateB: Invalid input. std::endl;}}
};// 具体状态C
class StateC : public State {
public:void Handle(std::string input, std::shared_ptrState currentState) override {if (input C) {std::cout StateC: Handle input C. std::endl;} else if (input A) {std::cout StateC: Transition to StateA. std::endl;currentState std::make_sharedStateA();} else {std::cout StateC: Invalid input. std::endl;}}
};// 上下文类维护当前状态并执行请求
class Context {
private:std::shared_ptrState currentState;
public:Context(std::shared_ptrState initialState) : currentState(initialState) {}void Request(std::string input) {currentState-Handle(input, currentState);}
};
小结
这篇文章主要说了状态模式的定义结构图以及代码示例这些都很常用的不管是生活中还是开发中都是这样的。道理呢往往很简单看看代码示例再想想现实生活可能就理解了。OK翻篇。