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

网站站内链接珠海网站制作公司

网站站内链接,珠海网站制作公司,网站代理浏览器0,厦门百度关键词优化核心思想 状态模式(State Pattern) 是一种行为设计模式,允许对象在其内部状态改变时改变其行为。它将状态相关的逻辑分散到不同的状态类中,避免了使用大量的条件语句来处理不同状态下的行为。 状态抽象化:将对象的状…

核心思想

状态模式(State Pattern) 是一种行为设计模式,允许对象在其内部状态改变时改变其行为。它将状态相关的逻辑分散到不同的状态类中,避免了使用大量的条件语句来处理不同状态下的行为。

状态抽象化:将对象的状态抽象为独立的类,每个状态类实现与该状态相关的行为。
上下文委托:上下文对象(Context)持有一个状态对象的引用,并将行为委托给当前状态对象。
状态切换:状态类负责在适当的时候切换到其他状态,上下文对象只需更新当前状态的引用。

使用场景

对象的行为依赖于它的状态,并且需要在运行时根据状态改变行为。
代码中包含大量与状态相关的条件分支,且这些分支在多个地方重复出现。
需要清晰地管理状态的转换逻辑,避免状态相关的代码分散在多个地方。

优点

消除条件分支:将状态相关的逻辑分散到状态类中,避免了复杂的条件判断。
易于扩展:新增状态时只需添加新的状态类,无需修改现有代码。
提高可读性:状态转换逻辑集中在状态类中,代码更清晰易懂。

缺点

类数量增加:每个状态都需要一个类,可能会导致类的数量膨胀。
状态转换逻辑分散:状态转换逻辑分布在各个状态类中,可能会增加调试难度。

示例代码

#include <iostream>
#include <memory>// 前向声明
class State;// 上下文类:电灯
class Light {
private:std::shared_ptr<State> state_; // 当前状态public:Light(std::shared_ptr<State> state);void setState(std::shared_ptr<State> state); // 设置状态void pressSwitch(); // 按下开关
};// 抽象状态类
class State {
public:virtual ~State() = default;virtual void handle(Light& light) = 0; // 处理行为
};// 具体状态类:开状态
class OnState : public State {
public:void handle(Light& light) override;
};// 具体状态类:关状态
class OffState : public State {
public:void handle(Light& light) override;
};// Light 类的实现
Light::Light(std::shared_ptr<State> state) : state_(state) {}void Light::setState(std::shared_ptr<State> state) {state_ = state;
}void Light::pressSwitch() {state_->handle(*this); // 委托给当前状态处理
}// OnState 类的实现
void OnState::handle(Light& light) {std::cout << "Turning light off." << std::endl;light.setState(std::make_shared<OffState>()); // 切换到关状态
}// OffState 类的实现
void OffState::handle(Light& light) {std::cout << "Turning light on." << std::endl;light.setState(std::make_shared<OnState>()); // 切换到开状态
}// 客户端代码
int main() {// 初始状态为关Light light(std::make_shared<OffState>());// 按下开关,切换状态light.pressSwitch(); // 开light.pressSwitch(); // 关light.pressSwitch(); // 开return 0;
}

输出结果

Turning light on.
Turning light off.
Turning light on.

代码解析

Light 类:上下文类,持有一个状态对象的指针,并将行为委托给当前状态。
State 类:抽象状态类,定义了状态的行为接口。
OnState 和 OffState 类:具体状态类,实现了状态的行为和状态转换逻辑。
状态切换:在 handle 方法中,状态类负责切换到下一个状态。


文章转载自:

http://quRepek3.stfdh.cn
http://43mQSz4a.stfdh.cn
http://qMfwNPy6.stfdh.cn
http://HBg47Ns0.stfdh.cn
http://PmsOym6o.stfdh.cn
http://zaWzm4vc.stfdh.cn
http://rS7uwZ4e.stfdh.cn
http://ybX5uMYU.stfdh.cn
http://E50NtSeZ.stfdh.cn
http://UzhFPpWf.stfdh.cn
http://tWNPTGYg.stfdh.cn
http://8Zz0CDNZ.stfdh.cn
http://COCtQBBN.stfdh.cn
http://YeiQ57dq.stfdh.cn
http://NpzNlfH6.stfdh.cn
http://RBs4ZdzF.stfdh.cn
http://4KDknzq2.stfdh.cn
http://nmqwjMit.stfdh.cn
http://LQGu1kbc.stfdh.cn
http://kXzsWnjs.stfdh.cn
http://9gHRWBVD.stfdh.cn
http://NKohz38h.stfdh.cn
http://1yxFYQ6i.stfdh.cn
http://MbpMwZ2F.stfdh.cn
http://Jh207C56.stfdh.cn
http://UTVY22Gb.stfdh.cn
http://i58p7M2K.stfdh.cn
http://PsnjbztR.stfdh.cn
http://ZQfa2p4H.stfdh.cn
http://81i7UHxt.stfdh.cn
http://www.dtcms.com/wzjs/628827.html

相关文章:

  • 做决定的网站网址大全2345qiren
  • 北京网络网站建设公司钢筋网片生产厂家
  • 红谷滩园林建设集团有限公司 网站通过备案号查网站
  • jsp做网站能实现什么功能wordpress国内视频网站
  • 西安免费做网站网站如何做才可以微信直接登录
  • 企业网站优化工具手机如何做网站
  • 网站开发报价单明细seo挂机赚钱
  • 珠海seo网站建设软件开发团队组成
  • 介绍自己做的网站电子商务排名
  • 网站构造下拉列表怎么做app开发定制公司哪家
  • 沧县做网站价格wordpress persona
  • 坂田网站建设多少钱网站备案时 首页
  • 东莞设计网站公司网站优化公司认准乐云seo
  • 做网站赚50万阿里巴巴国际站下载电脑版
  • 阿里巴巴可以做公司网站吗wordpress点赞功能
  • 专业网站建设知识wordpress cpu检查
  • 济南哪里有网站建设公司国内服务器免备案方法
  • 单页面网站源码网站建设遵循的规范
  • 厦门网站建设找哪家东台网站建设公司
  • 公司网站与营销网站区别湖南省建设厅最新领导分工
  • 买机箱网站公司logo设计价格
  • 辽宁鲲鹏建设集团网站凡客诚品为什么失败
  • 企业自助建站系统怎么建先做网站还是做APP
  • 制作音乐网站实验报告艾纳网站建设
  • 建设银行网站 开户行怎么查网址没封的来一个
  • 建建建设网站公司网站贵阳网站建设运营
  • 电商平台网站建设合同免费用搭建网站
  • 小语种企业网站建设seo如何优化的
  • 成功的wordpress网站电商网站制作设计
  • 怎么可以找到做公益的网站网站维护与推广