首页 > 其他分享 >设计模式-状态模式

设计模式-状态模式

时间:2022-10-11 08:46:08浏览次数:48  
标签:状态 逻辑 这个 执行 execute 模式 state 设计模式

封装数据的状态流转逻辑。这个状态模式呢,叫做state模式啊,然后给大家来举一个场景,就比如说,咱们这个销售出货单,它那个状态需要从新建,然后待审批,已审批,已完成,四个状态之间流转,然后每个,流转到每个状态的时候,都需要执行那个状态对应的一个逻辑,然后我们直接把这个状态模式的代码直接做出来,StatePatternDemo,其实这个状态模式,大概是这样的,它这里面会有一个接口,它这个接口叫做State,这里面会有一个execute();,比如说执行什么逻辑,然后它这里会有一个class,比如说这个NewState implements State,新建这个状态,然后,是这样子,执行这个销售单出库新建状态的逻辑,然后我们一共是4个状态么,然后,一个新建,一个叫做待审批,我们叫做ApprovingState,然后执行ApprovedState,已审批,最后,我们执行FinishedState已完成,执行销售单出库待审批状态的逻辑,执行销售单出库已审批状态的逻辑,执行销售单出库已完成状态的逻辑,好,这个是多种状态。

然后的话呢,我们写一个Context,里面有一个State,有一个初始的Context,和一个execute(),

public void execute(int stateType){

  if(stateType == 1) {

    this.state = new ApprovingState();

    this.state.execute();

  } else if (stateType == 2) {

    this.state = new ApprovedState();

    this.state.execute();

  } else if (stateType == 3) {

    this.state = new FinishedState();

    this.state.execute();

  }

}

好,那么它其实就是说是这样的一个概念啊。然后main方法这边的 话,

public static void main(String[] args) {

  Context context  = new Context(new NewState());

  context.execute(1);

  context.execute(2);

  context.execute(3);

}

好,你看一下,

执行销售出货单新建状态的逻辑

执行销售出货单待审批状态的逻辑

执行销售出货单已审批状态的逻辑

执行销售出货单已完成状态的逻辑

那么来看一下,这个状态模式,是什么意思,就是如果说,你的某一个数据,它有一个状态,什么概念,那你就可以把这个数据不同的状态要执行的一些业务逻辑,封装到某个类里面去,然后专门搞一个Context,在这个Context上传一个参数,根据传入的参数不同,然后这个context负责控制这个状态的流转,比如传什么参数的时候,这个数据的状态,就流转到那个状态下,同时的话,去那个执行那个状态对应的state里面的这个业务逻辑,也就是说,它适合的场景是什么呢,就是说这个数据有状态,然后既然有状态,那么这个状态就一定会这个流转,就会会从,一定会从状态1,这个变化成状态2,对吧,然后有一个context,或者这么说吧,将不同的状态要执行的代码逻辑封装在不同的state类中,然后有一个context类,负责根据传入的参数,然后决定这份数据的这个状态,流转到什么状态,同时负责执行那个新状态的代码逻辑,ok,这个状态模式是这样一个思路,我之所以没有跟大家说,不用这个模式的代码是怎么写的是因为我都不想去写了,因为它其实,实在是适合的场景太明显了,就是只要有状态,都按照这个标准的状态模式来实现,当然这里面可以做一些改进,但是这个状态的思想,就是说是,不同的状态逻辑放不同的这个state类,然后那个要有一个类负责这个状态之间的流转,以及这个状态逻辑的执行,所以它适合的就是这个场景,你只要遇到这个场景就用模式的核心思想来设计,那么这个它主要的好处是什么,是对于有状态的这个场景,按照面向对象的思想来设计,而不是说在一堆代码里面,比如说又是一堆if-else,if-else,比如说if 开始执行那个状态的一堆逻辑,这个else if是什么东西,开始执行另外一个的一堆逻辑,如果你那样写的话,它又是屎一样的代码,它按照状态模式的这个思想,把不同的状态模式封装一下,统一控制状态之间的流转,和状态逻辑的执行,那这样的话,这个代码很清晰,可读性很好,可维护性很好。那么这个整个状态模式就是这么一个思路。那么后面这个状态模式,其实你看这个电商系统里面,天然的就有很多状态模式的一些运用场景,因为我们系统是由大量状态变更的一个逻辑的,那么我们就可以完全用这个状态模式来实现,比如各种单子,它的这个变更时候的状态的流转,和每一个单子的代码逻辑对吧,这个是到后面,我们在电商系统里去实现。

 

 

 

 

end

标签:状态,逻辑,这个,执行,execute,模式,state,设计模式
From: https://www.cnblogs.com/HarryVan/p/16778021.html

相关文章

  • 设计模式-备忘录模式
    将中间数据暂存之后再恢复。好,这个备忘录模式啊,它英文名叫memento,这个memento模式,它是什么意思,我先给大家来举个场景吧,我们现在这个场景是说,首先呢,我有一个类,然后这个类需......
  • 分散式、集中式以及分布式三种模式
    例如:我所工作的地方是一个软件园中的一座大楼,而这座大楼的整个温度调节问题由某一物业公司搞定。现在,摆在他们面前存在多种选择方案。第一种:分散式,即大楼中的各个公司自己......
  • 安装Standalone模式HBase
    所谓Standalone模式HBase,就是只启动一个JVM进程,在这个进程中同时启动了多个后台角色,如:HMaster,单个HRegionServer,以及ZooKeeper服务。下载安装最新版本从这里下载。历史......
  • apache MPM的三种工作模式
    apache和httpd的关系:apache刚开始靠apache这个软件起家,后来发展成为一个基金会,拥有了几十种开源项目,所以就把提供web服务的apache这个软件更名为httpd(apache2以上版本改称......
  • 关于建造者模式builder的深入思考
    看到的这个build之后还利用switch来case的方法真的眼前一亮。最近我想实现一个builder库,用来将要构建的instance按顺序创建好。不过难点在于怎样设计它们的顺序呢?原本的......
  • stm32cubemx配置f103zet6定时器中断,pwm波输出模式,输出捕获模式 慢慢更新
    定时器详细介绍(基于标准库的,原理部分可参考): STM32-定时器详解_KevinFlyn的博客-CSDN博客_stm32定时器1.定时器中断配置配置参考 STM32CubeMX配置定时器中断_小哥。的......
  • 设计模式 -- Adapter(适配器模式)
    适配器(Adapter)将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在软件系统中,由于应用环境的变化,......
  • 开启Win10强大的“上帝模式”:所有选项、任你设置
    要对Windows系统进行选项调整,用到的基本都是“控制面板”和“设置”这两个组件,但相信不少人都吐槽过有些设置选项隐藏得太深了,即使是老司机都不一定能完全摸清,新手更是无从......
  • RocketMQ 5.0:无状态代理模式的探索与实践
    本文作者:金吉祥,ApacheRocketMQPMCMember,阿里云智能高级技术专家背景首先,让我们来看下是遇到了哪些痛点问题,促使我们去探索一种无状态代理的RocketMQ新架构的;RocketMQ拥......
  • 基于基因数据的神经网络模式分类研究
    1.1引言近年来,随着基因技术在医学中的广泛应用,基于基因数据的计算机辅助诊断迅速发展起来。计算机辅助诊断可以提高医生诊断的准确率,协助医生对病人病因进行判断和识别并有......