wordpress多站用户,wordpress 宅男猫网站,网站页面设计,华为云上面可以代做网站吗本文章属于专栏- 概述 - 《设计模式#xff08;极简c版#xff09;》-CSDN博客 模式说明#xff1a;
方案#xff1a;状态模式是一种行为设计模式#xff0c;用于在对象的内部状态发生改变时改变其行为。它包括三个关键角色#xff1a;上下文#xff08;Context#x… 本文章属于专栏- 概述 - 《设计模式极简c版》-CSDN博客 模式说明
方案状态模式是一种行为设计模式用于在对象的内部状态发生改变时改变其行为。它包括三个关键角色上下文Context、抽象状态State、具体状态ConcreteState。上下文负责维护一个状态对象并在需要时委托给具体状态对象执行行为。抽象状态定义了一个接口用于封装特定状态下的行为。具体状态实现了抽象状态定义的接口并定义了特定状态下的行为。优点将状态转换的逻辑封装在状态类中使得状态间的切换更加简单避免了大量的条件语句。将相关行为组织在一起增强了代码的可维护性和可扩展性。缺点增加了类和对象的数量可能会导致系统更加复杂。
本质思想 状态模式的本质是将对象的状态抽象为一个独立的类使得对象在不同状态下有不同的行为并且能够动态地切换状态。
实践建议在实际开发中状态一般用一个变量表示就够了很少会抽象成一个类。如果状态需要多个变量表示且此类状态有固定的方法则可以使用状态模式。这里封装的是当前状态以及状态附属的行为。另外不管是“状态类”作为参数传给“上下文类”执行还是“上下文类”传给”状态类“执行没有本质的区别。 代码示例
#include iostream// 抽象状态类
class State {
public:virtual void handle() 0;
};// 具体状态类
class ConcreteStateA : public State {
public:void handle() override {std::cout State A handled. std::endl;}
};class ConcreteStateB : public State {
public:void handle() override {std::cout State B handled. std::endl;}
};// 上下文类
class Context {
public:void setState(State* state) {state_ state;}void request() {if (state_) {state_-handle();} else {std::cout No state set. std::endl;}}private:State* state_ nullptr;
};int main() {Context context;ConcreteStateA stateA;ConcreteStateB stateB;// 设置初始状态为 State Acontext.setState(stateA);context.request(); // 输出State A handled.// 切换状态为 State Bcontext.setState(stateB);context.request(); // 输出State B handled.return 0;
}