当前位置: 首页 > news >正文

凡客衬衫官方网站seo自然排名关键词来源的优缺点

凡客衬衫官方网站,seo自然排名关键词来源的优缺点,做调查的网站推荐,乐清市网站建设设计简介 状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,看起来就像是改变了其类。状态模式将对象的状态封装成不同的类,并使得对象在不同状态下有不同的行为。 描述 状态模式通过…

简介

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为,看起来就像是改变了其类。状态模式将对象的状态封装成不同的类,并使得对象在不同状态下有不同的行为。

描述

状态模式通过将每种状态封装成一个独立的类,然后将具体状态类的行为委托给Context类,使得Context类在不同的状态下具有不同的行为。这样,当Context对象的状态发生变化时,它的行为也会随之改变。

原理

状态模式由三个核心组件组成:Context(上下文类)、State(抽象状态类)和ConcreteState(具体状态类)。

  • Context类负责定义切换状态的口,并维护一个对当前状态对象的引用。Context类将具体的状态行为委托给当前状态对象。
  • State类是一个抽象类,定义了具体状态类需要实现的方法,以及在不同状态下Context对象应该具有的行为。
  • ConcreteState类是具体的状态类,实现了State类定义的方法,并根据当前状态下的需求来执行相应的逻辑。

类图

在这里插入图片描述

示例

假设有一个电梯系统,其中电梯有三种状态:打开状态(OpenState)、关闭状态(ClosedState)运行状态(RunningState)。当电梯处于不同的状态时,它的行为也不同。

C++示例代码如下:

#include <iostream>// Context
class Elevator {
public:virtual void open() = 0;virtual void close() = 0;virtual void run() = 0;
};// State
class ElevatorState {
public:virtual void open(Elevator* elevator) = 0;virtual void close(Elevator* elevator) = 0;virtual void run(Elevator* elevator) = 0;
};// ConcreteState
class OpenState : public ElevatorState {
public:void open(Elevator* elevator) override {std::cout << "The elevator is already open." << std::endl;}void close(Elevator* elevator) override {std::cout << "Closing the elevator..." << std::endl;elevator->setState(new ClosedState());}void run(Elevator* elevator) override {std::cout << "Cannot run the elevator while it is open." << std::endl;}
};class ClosedState : public ElevatorState {
public:void open(Elevator* elevator) override {std::cout << "Opening the elevator..." << std::endl;elevator->setState(new OpenState());}void close(Elevator* elevator) override {std::cout << "The elevator is already closed." << std::endl;}void run(Elevator* elevator) override {std::cout << "Running the elevator..." << std::endl;elevator->setState(new RunningState());}
};class RunningState : public ElevatorState {
public:void open(Elevator* elevator) override {std::cout << "Cannot open the elevator while it is running." << std::endl;}void close(Elevator* elevator) override {std::cout << "Cannot close the elevator while it is running." << std::endl;}void run(Elevator* elevator) override {std::cout << "The elevator is already running." << std::endl;}
};// Concrete Context
class ElevatorSystem : public Elevator {
public:ElevatorSystem() {currentState = new ClosedState();}void setState(ElevatorState* state) {delete currentState;currentState = state;}void open() override {currentState->open(this);}void close() override {currentState->close(this);}void run() override {currentState->run(this);}private:ElevatorState* currentState;
};// 使用示例
int main() {ElevatorSystem system;system.open();  // Opening the elevator...system.open();  // The elevator is already open.system.close(); // Closing the elevator...system.run();   // Running the elevator...system.close(); // The elevator is already closed.system.open();  // Opening the elevator...system.run();   // Cannot run the elevator while it is open.return 0;
}

输出结果

Opening the elevator...
The elevator is already open.
Closing the elevator...
Running the elevator...
The elevator is already closed.
Opening the elevator...
Cannot run the elevator while it is open.

解释

在上述示例中,Elevator类是上下文类(Context),它定义了切换状态的接口,并维护一个对当前状态对象的引用。ElevatorState是抽象状态类(State),它定义了具体状态类需要实现的方法。OpenState、ClosedState和RunningState是具体状态类(ConcreteState),它们分别实现了ElevatorState的方法,并根据当前状态下的需求执行相应的逻辑。
在示例中,创建了一个电梯系统(ElevatorSystem),初始状态为关闭状态(ClosedState)。通过调用ElevatorSystem的open、close和run方法来切换电梯的状态,并根据不同的状态执行相应的操作。

结论

状态模式通过将对象的状态封装成独立的类,并委托给Context类来管理,达到了解耦的目的。当对象的状态发生变化时,它的行为也会相应地发生变化。

状态模式适用于以下情况:

  • 当一个对象的行为取决于其状态,并且需要在运行时根据状态改变行为时,可以使用状态模式。
  • 当一个类有很多状态,并且状态之间的转换非常复杂时,可以使用状态模式来将每个状态的行为解耦合。

状态模式常见的应用场景包括订单状态管理、电梯状态控制、游戏角色状态机等。

http://www.jinmujx.cn/news/109129.html

相关文章:

  • 电子商务网站开发设计报告百度关键词排名怎么查
  • 电子科技公司网站网站seo重庆
  • 贵州网站建设设计公司seo 技术优化
  • 网页设计图片大小设置seo最新技巧
  • 网站建设与管理读书心得企业网站建设推广
  • 2018外贸网站排名软件外包企业排名
  • 用什么软件做网站hao生猪价格今日猪价
  • 目录网站做外链社群营销案例
  • 昆明网站seo报价网络营销的六大特征
  • 长沙专业做网站百度世界排名
  • wordpress纯css主题自适应天津seo诊断技术
  • 昆明网站制作方案定制球队积分排名
  • 网站建设文章官网热搜在哪里可以看
  • 网站开发人员的 生活seo外包优化
  • ssl aws wordpress长春网络优化最好的公司
  • dede 企业网站模板下载网络营销推广的基本手段
  • 自己做网站兼职免费制作小程序平台
  • 那种网站后台最好网络上哪里可以做推广
  • wordpress添加子菜单长沙网站seo收费标准
  • 如何设计一个app免费网站seo
  • 深圳品牌网站制作游戏优化大师下载安装
  • 新乡市网站建设公司如何引流与推广
  • 桃子网站百度搜索资源平台官网
  • 做网站的服务器用什么系统百度快速收录教程
  • 查看网站 vps上海高端网站定制
  • 苏州微信网站建设西安网站seo费用
  • 綦江网站北京seo经理
  • 网站安全检测官网网站关键词排名seo
  • 收到网站代码后怎么做seo手机搜索快速排名
  • 如何在微信公众号里建设微网站北京做网站推广