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

网站建设业务活动运转灵活小企业网站建设

网站建设业务活动,运转灵活小企业网站建设,电商网站建设存在的问题和处理方案,西安网站开发哪家好状态模式是一种行为型设计模式#xff0c;它允许对象内部状态发生改变时改变其行为#xff0c;它将行为封装在不同的状态对象中#xff0c;在运行时通过切换不同的状态可以表现出不同的行为。 状态模式一般有三种角色#xff1a; 1、状态接口#xff1a;定义了状态对象所…状态模式是一种行为型设计模式它允许对象内部状态发生改变时改变其行为它将行为封装在不同的状态对象中在运行时通过切换不同的状态可以表现出不同的行为。 状态模式一般有三种角色 1、状态接口定义了状态对象所具有的公共接口用于封装其相关行为。 2、具体状态实现状态接口在不同状态下表现不同的行为 3、环境类维护一个当前状态对象的引用并在其内部进行状态切换和行为的调用。环境类客户端根据当前状态对象的不同调用不同的行为逻辑。 其实状态模式和策略模式非常相似可以访问这篇文章可以发现真的真的非常类似。 策略模式-C实现 举例 现在有一个订单系统每一个订单有三种状态待处理、已发送、已送达。不同的状态下它们的行为也会不同 具体的行为包括 1、待处理状态下订单可以取消、订单即将处理、订单还未送达因为还没有处理订单 2、已发送状态下订单不可以取消、订单已经处理、订单即将送达 3、送达状态下订单不可以取消、订单已经处理、订单已经送达。 #include iostream #include memory// 抽象状态接口 class IOrderState { public:virtual ~IOrderState() {}// 取消行为virtual void Cancel() 0;// 待处理行为virtual void Ship() 0;// 已送达行为virtual void Deliver() 0; };// 具体状态-待处理状态 class PendingState: public IOrderState { public:virtual void Cancel() override{std::cout 订单待处理状态取消订单 std::endl;}virtual void Ship() override{std::cout 订单待处理状态订单即将处理 std::endl;}virtual void Deliver() override{std::cout 订单待处理状态订单还未处理没有送达 std::endl;} };// 具体状态-已发送状态 class SendState: public IOrderState { public:virtual void Cancel() override{std::cout 订单已发送状态订单无法取消 std::endl;}virtual void Ship() override{std::cout 订单已发送状态订单已经处理 std::endl;}virtual void Deliver() override{std::cout 订单已发送状态订单即将送达 std::endl;} };// 具体状态-已送达状态 class DeliveredState: public IOrderState { public:virtual void Cancel() override{std::cout 订单已送达状态订单无法取消 std::endl;}virtual void Ship() override{std::cout 订单已送达状态订单已经处理 std::endl;}virtual void Deliver() override{std::cout 订单已送达状态订单已经送达 std::endl;} };// 环境类 class ContextState { public:ContextState(){// 订单初始状态是待处理orderState_ std::make_sharedPendingState();}// 切换当前状态void SetOrderState(std::shared_ptrIOrderState _orderState){orderState_ _orderState;}// 取消void Cancel(){orderState_-Cancel();}// 即将处理void Ship(){orderState_-Ship();}// 已送达void Deliver(){orderState_-Deliver();}private:std::shared_ptrIOrderState orderState_; };测试 void TestState() {// 环境类对象std::shared_ptrContextState context std::make_sharedContextState();// 待处理状态std::shared_ptrIOrderState pendingState std::make_sharedPendingState();// 已发送状态std::shared_ptrIOrderState sendState std::make_sharedSendState();// 已送达状态std::shared_ptrIOrderState deliverState std::make_sharedDeliveredState();// 订单默认是待处理状态context-Cancel();context-Ship();context-Deliver();std::cout --------------------- std::endl;// 切换成已发送状态context-SetOrderState(sendState);context-Cancel();context-Ship();context-Deliver();std::cout --------------------- std::endl;// 切换成已送达状态context-SetOrderState(deliverState);context-Cancel();context-Ship();context-Deliver();std::cout --------------------- std::endl; }输出 订单待处理状态取消订单 订单待处理状态订单即将处理 订单待处理状态订单还未处理没有送达 --------------------- 订单已发送状态订单无法取消 订单已发送状态订单已经处理 订单已发送状态订单即将送达 --------------------- 订单已送达状态订单无法取消 订单已送达状态订单已经处理 订单已送达状态订单已经送达 ---------------------代码示例中我们创建了一个抽象状态接口定义订单取消、订单待处理、订单已送达三种行为。还创建了三个具体状态订单待处理、订单已发送、订单已送达实现了这三种行为方法在环境类中我们实现了切换状态的方法和这三种行为方法。 根据输出我们可以发现在不同的状态下它们的行为也是不同的比如在订单待处理状态下订单可以取消、可以即将处理、但是没有送达同理订单已发送状态下订单不可以取消、订单已经处理、订单即将送达。 我们可以发现状态模式和策略模式非常像它们其实都是解决了多个if_else的情况。 状态模式遵循哪些设计原则 1、单一职责原则SRP每个状态都有一个明确定义的职责它只负责管理对象在特定状态下的行为。 2、开闭原则OCP状态模式使得添加新状态或修改现有状态的行为变得简单而无需修改现有的代码。 3、里氏替换原则LSP状态对象可以替代彼此因为它们都实现了相同的接口或基类。 状态模式的优点包括 1、代码结构清晰将对象的不同状态封装到独立的类中使得代码结构更加清晰、易于理解和维护。 2、支持开闭原则通过添加新的状态类或修改现有状态类的行为可以方便地扩展和修改对象的行为而不会影响其他代码。 3、消除了冗余的条件语句状态模式将状态转换逻辑从客户端代码中移除这样客户端代码不再需要大量的条件语句来处理不同状态下的行为。 4、提供了一种简洁的方式来配置对象的状态流转状态模式将对象的状态流转逻辑集中在状态类中使得状态的变化更加可见和易于管理。 缺点 1、引入了多个状态类使用状态模式会引入多个状态类增加了系统中的类的数量。 2、可能增加代码复杂性在某些情况下状态模式可能会增加代码的复杂性特别是当有大量的状态和状态转换时。
http://www.zqtcl.cn/news/7978/

相关文章:

  • 深圳的设计企业网站邵阳网站优化
  • wordpress建娱乐站如何更改网站关键词
  • 青岛网站互联网公司做夜夜做网站
  • 深圳网站设计哪家wordpress 设置显示中文字体
  • 手表排名哪个网站好云南网站设计企业
  • 连云港优化网站团队临沂营销网站建设
  • 外星人建设的网站怎样自己建立一个网站
  • 个人做广播网站需要注意什么wordpress视频适应手机端
  • 福建建设执业中心网站用windows建设网站好吗
  • 顺德网站建装修建材网站模板
  • 做网站要多少钱怎么样保定 网站建设
  • 如何在网站后台备份数据库微网站怎么做的好
  • 柳州网站建设数公式大全购物网站的搜索功能是怎么做的
  • wordpress 企业站成都 企业 网站建设
  • 保健品网站制作为什么网站建设要将access数据库文件变成asa
  • wordpress 角色网站关键词优化到首页难度
  • 长治网站建设电话通栏 网站模板
  • 不用下载直接浏览的网站能够做外贸的网站有哪些问题
  • 门窗企业网站建设wordpress能不能导入html
  • ps做网站原形环保工程 技术支持 东莞网站建设
  • asp的公司网站个人如何做一个网站
  • 用dw制作学校网站教程用dw做网站怎么添加水平线
  • 住房和城乡建设部网站 上海开发软件的app
  • 如何做网站搬运工赚钱百度收录怎么查询
  • 装修公司怎么做网站推广理论网站建设实施方案
  • 网站怎么接广告网站查询域名ip解析
  • 苏州企业建站程序wordpress上传pdf
  • php 网站部署到服务器wordpress使用iis重定向到目录
  • 网站页面设计布局中文logo设计网站
  • 建筑课程网站广州网站建设广州网络推广公司