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

贵州专业网站建设公司建设工程施工许可证在哪个网站办

贵州专业网站建设公司,建设工程施工许可证在哪个网站办,wordpress管理员权限获取,四川住房城乡和城乡建设厅网站Linux C 055-设计模式之状态模式 本节关键字:Linux、C、设计模式、状态模式 相关库函数: 概念 状态模式(State Pattern)是设计模式的一种,属于行为模式。允许一个对象在其内部状态改变时改变它的行为。对象看起来似…

Linux C++ 055-设计模式之状态模式

本节关键字:Linux、C++、设计模式、状态模式
相关库函数:

概念

状态模式(State Pattern)是设计模式的一种,属于行为模式。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

状态模式解决对象行为依赖于其状态的问题,使得对象可以在状态变化时切换行为。

优缺点

优点

1、封装状态转换规则:将状态转换逻辑封装在状态对象内部。
2、易于扩展:增加新的状态类不会影响现有代码。
3、集中状态相关行为:将所有与特定状态相关的行为集中到一个类中。
4、简化条件语句:避免使用大量的条件语句来切换行为。
5、状态共享:允许多个上下文对象共享同一个状态对象。

缺点

1、增加类和对象数量:每个状态都需要一个具体的状态类。
2、实现复杂:模式结构和实现相对复杂。
3、开闭原则支持不足:增加新状态或修改状态行为可能需要修改现有代码。

使用场景

1、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2、一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

当对象的行为随状态改变而变化时,考虑使用状态模式。状态模式适用于替代复杂的条件或分支语句。

角色说明

状态模式包含以下几个主要角色:

上下文(Context):定义了客户感兴趣的接口,并维护一个当前状态对象的引用。上下文可以通过状态对象来委托处理状态相关的行为。

状态(State):定义了一个接口,用于封装与上下文相关的一个状态的行为。

具体状态(Concrete State):实现了状态接口,负责处理与该状态相关的行为。具体状态对象通常会在内部维护一个对上下文对象的引用,以便根据不同的条件切换到不同的状态。

代码示例

//头文件
#include <iostream>
using namespace std;class Context;
// 抽象出来的状态类
class State
{
public:/* 抽象的接口,每个子类去实现这个接口根据自己的逻辑执行任务或者转换状态。*/virtual void Handle(Context *context) = 0;// 获得当前的状态virtual void GetState() = 0;
};// 状态管理类
class Context
{
public:// 初始化状态Context(State *state) {m_pState = state;}// 获得当前的状态State* GetState() {return m_pState;}// 改变当前的状态void SetState(State *state){m_pState = state;}// 执行状态类实现的方法void Request() {m_pState->Handle(this);}State* m_pState;
};
// 具体的状态子类
class ConcreteStateA:public State
{
public:void Handle(Context *context);void GetState();
};
// 具体的状态子类
class ConcreteStateB:public State
{
public:void Handle(Context *context);void GetState();
};
// 具体的状态子类
class ConcreteStateC:public State
{
public:void Handle(Context *context);void GetState();
};// cpp文件
#include "StateMode.h"
void ConcreteStateA:: Handle(Context *context)
{context->m_pState = new ConcreteStateB;cout<<"当前状态是A,下一状态是B"<<endl;
}
void ConcreteStateB:: Handle(Context *context)
{context->m_pState = new ConcreteStateC;cout<<"当前状态是B,下一状态是C"<<endl;
}
void ConcreteStateC:: Handle(Context *context)
{context->m_pState = new ConcreteStateA;cout<<"当前状态是C,下一状态是A"<<endl;
}
void ConcreteStateA:: GetState()
{cout<<"当前状态是A"<<endl;
}
void ConcreteStateB:: GetState()
{cout<<"当前状态是B"<<endl;
}
void ConcreteStateC:: GetState()
{cout<<"当前状态是B"<<endl;
}
int main(int argc, char *argv[])
{// 初始化A状态Context* context = new Context(new ConcreteStateA);context->Request();context->Request();context->Request();getchar();return 0;
}
http://www.yayakq.cn/news/591923/

相关文章:

  • 东莞微信网站开发江西岳顶建设工程有限公司网站
  • 网站优化推广软件传奇176网页游戏
  • 个人网站建设合同树形结构网站案例
  • 做网站图片教程wordpress公共库设置
  • 如何利用问答类网站做推广陕西省建设监理协会官方网站
  • 做白酒的网站怎样做百度推广网页
  • 企业网站建设分工云主机和云服务器有什么区别
  • 装饰网站建设公司网站用什么框架
  • 可以在家做兼职的网站做英文网站多钱
  • 计算机网站建设书没有平台没有网站怎么做外贸
  • 做网站的技术风险清空wordpress数据库
  • 用h5做网站是什么意思建筑公司加盟分公司
  • 网站开发立项报告排版设计英文
  • 上海360网站建设梅河口建设局网站
  • 广东建设行业招聘 什么网站wordpress简洁自适应主题
  • 网站开发制作包括哪些的基本流程电子商务网站功能设计与分析
  • 恢复被百度k网站 关键词收录阜宁做网站工作室
  • 厦门做网站培训云南网站新备案制
  • 英文企业网站源码查信息的网站有哪些
  • 简要概括自建网站的优缺点中山专业外贸网站建设
  • 娱乐网站建设怎么样怎么做彩票平台网站吗
  • 怎么cms做网站如何学习建设网站
  • 叫什么公子的网站做ppt的河北邯郸区号
  • 做公司网站的时间网站流量分析的指标有哪些
  • 网站名称个人哈尔滨网站开发联系薇
  • 查询网站服务器地址送菜上门网站app如何做
  • 手机网站改app建设银行网银盾连接不上网站
  • 网站仿站茶网站开发的意义目的
  • 中国石油销售公司网站建设家教中介网站开发
  • 站长工具无忧杭州网站建设洛洛科技