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

住房城乡建设管理网站免费的网站关键词查询工具

住房城乡建设管理网站,免费的网站关键词查询工具,做公司网站主要需要什么科目,大型网站建设部署方案软件设计模式深度解析:状态模式及其C实践 一、模式思想:行为的状态化封装 状态模式(State Pattern)是面向对象设计中的行为型模式,其核心思想是将对象的行为封装到独立的状态对象中,使得对象能根据内部状态…

软件设计模式深度解析:状态模式及其C++实践

一、模式思想:行为的状态化封装

状态模式(State Pattern)是面向对象设计中的行为型模式,其核心思想是将对象的行为封装到独立的状态对象中,使得对象能根据内部状态的变化动态改变行为。该模式通过以下方式解耦程序逻辑:

  1. 将每个状态的行为抽象为独立类
  2. 允许对象在运行时切换状态对象
  3. 消除复杂的条件判断语句

模式结构图


二、模式实现:电梯状态控制实例

2.1 基础框架搭建

#include <iostream>
using namespace std;// 前置声明
class ClosedState;
class MovingState;
class StoppedState;// 状态接口
class ElevatorState {
public:virtual void openDoors() = 0;virtual void closeDoors() = 0;virtual void move() = 0;virtual void stop() = 0;virtual ~ElevatorState() = default;
};// 上下文环境
class Elevator {ElevatorState* currentState;public:Elevator() : currentState(nullptr) {}void setState(ElevatorState* newState) {delete currentState; // 释放旧状态currentState = newState;}void openDoors() {currentState->openDoors();}void closeDoors() {currentState->closeDoors();}void move() {currentState->move();}void stop() {currentState->stop();}
};

2.2 具体状态实现(以开门状态为例)


// 具体状态
class OpenState : public ElevatorState {Elevator* elevator;public:OpenState(Elevator* e) : elevator(e) {}void openDoors() override {cout << "电梯门已经是开启状态" << endl;}void closeDoors() override {cout << "正在关闭电梯门..." << endl;elevator->setState(new ClosedState(elevator));}void move() override {cout << "错误:门未关闭不能移动" << endl;}void stop() override {cout << "电梯已处于静止状态" << endl;}
};class ClosedState : public ElevatorState {Elevator* elevator;public:ClosedState(Elevator* e) : elevator(e) {}void openDoors() override {elevator->setState(new OpenState(elevator));cout << "电梯门已开启" << endl;}void closeDoors() override {cout << "电梯门已经是关闭状态" << endl;}void move() override {cout << "电梯开始移动..." << endl;elevator->setState(new MovingState(elevator));}void stop() override {cout << "电梯已处于静止状态" << endl;}
};class MovingState : public ElevatorState {Elevator* elevator;public:MovingState(Elevator* e) : elevator(e) {}void openDoors() override {cout << "错误:电梯移动中不能开门" << endl;}void closeDoors() override {cout << "电梯门已经是关闭状态" << endl;}void move() override {cout << "电梯已经在移动中" << endl;}void stop() override {cout << "电梯停止..." << endl;elevator->setState(new StoppedState(elevator));}
};class StoppedState : public ElevatorState {Elevator* elevator;public:StoppedState(Elevator* e) : elevator(e) {}void openDoors() override {cout << "电梯门已开启" << endl;elevator->setState(new OpenState(elevator));}void closeDoors() override {cout << "电梯门已经是关闭状态" << endl;}void move() override {cout << "电梯开始移动..." << endl;elevator->setState(new MovingState(elevator));}void stop() override {cout << "电梯已经处于静止状态" << endl;}
};

2.3 状态切换演示

int main() {// 创建电梯对象Elevator elevator;// 设置初始状态为停止状态elevator.setState(new StoppedState(&elevator));// 测试电梯状态转换elevator.openDoors();  // 电梯门已开启elevator.closeDoors(); // 正在关闭电梯门...elevator.move();       // 电梯开始移动...elevator.stop();       // 电梯停止...elevator.openDoors();  // 错误:电梯移动中不能开门return 0;
}

三、模式优势与适用场景

3.1 核心优势

  1. 单一职责原则:每个状态对应一个类
  2. 开闭原则:新增状态无需修改现有代码
  3. 消除巨型条件语句:将分支逻辑转化为对象
  4. 状态转换显式化:状态机清晰可见

3.2 典型应用场景

  • 对象行为随状态改变而变化的场景
  • 需要替代复杂条件状态判断语句
  • 存在大量状态相关代码且频繁变更
  • 需要清晰的状态转换控制流程

四、进阶实践技巧

4.1 状态共享优化

// 使用静态成员实现状态共享
class RunningState : public ElevatorState {static RunningState* instance;// ... 实现单例模式
};// 上下文调用方式
elevator.setState(RunningState::getInstance());

4.2 状态转换表管理

// 使用map管理状态转换规则
unordered_map<Type, function<State*()>> transitionTable = {{OPEN_EVENT, [](){ return new OpenState(); }},{CLOSE_EVENT, [](){ return new ClosedState(); }}
};

五、模式对比与常见问题

5.1 状态模式 vs 策略模式

特性状态模式策略模式
切换机制状态自动转换客户端显式指定
对象关系状态间相互知晓策略相互独立
主要目的管理状态依赖行为灵活替换算法

5.2 常见问题解答

Q:如何处理状态间的循环依赖?
A:采用中介者模式解耦状态交互

Q:状态对象是否需要持有上下文引用?
A:推荐使用弱引用或通过参数传递

Q:如何实现状态历史追溯?
A:使用备忘录模式保存状态栈

六、总结与延伸思考

状态模式将容易失控的状态判断逻辑转化为可维护的对象结构,特别适合实现复杂的状态机。当系统存在以下特征时建议采用该模式:

  • 状态数量超过5个
  • 状态转换逻辑复杂
  • 需要频繁添加新状态
  • 存在大量重复的状态判断代码

性能优化方向:对于高频率状态切换场景,可结合对象池技术复用状态对象,避免频繁的内存分配。

http://www.dtcms.com/wzjs/304954.html

相关文章:

  • 武汉做网站jw100广东seo价格是多少钱
  • 做个人网站到哪里做鹤壁搜索引擎优化
  • 网站后续建设说明seo研究中心好客站
  • 好的网站建设商家免费浏览外国网站的软件
  • java做网站赚钱太原百度关键词优化
  • 网站自适应尺寸百度推广网站
  • 房地产公司网站开发做销售怎样去寻找客户
  • 四川建设厅网站 蒋seo优化方案报价
  • 深圳微信网站公司哪家好seo外包网络公司
  • wordpress插件 二次开放网站seo好学吗
  • 企业网站营销如何建设世界杯比分查询
  • 什么是内容管理系统安卓优化大师官方版
  • 学平面设计的网站针对本地的免费推广平台
  • 兰州做网站怎么样网络推广培训班
  • 免费1级做爰片在线观看 历史网站seo站长工具是什么
  • java 框架用来做网站免费学生html网页制作成品
  • 成都市金堂县网站建设厦门小鱼网
  • 张家港市凤凰镇建设局网站数据分析培训机构哪家好
  • 塘厦镇做网站站内推广方案
  • 用淘宝域名做网站什么效果360排名优化工具
  • 博彩类网站怎么做日本粉色iphone
  • 相亲网站源码php模版自己如何优化网站排名
  • 品牌网站建设 app建设seo排名赚app下载
  • 北京电力交易中心seo排名优化首页
  • 化妆品可做的团购网站有哪些服装市场调研报告范文
  • 北京商城网站建设报价自媒体平台注册官网下载
  • 做网站的意义百度seo排名培训优化
  • 免费空间做自己的网站app拉新推广一手接单平台
  • 建设红外测温仪网站贵州整站优化seo平台
  • 自己做网站 做什么好怎么做一个公司网站