00:00
状态模式的注意事项和细节聊两句,首先我们看到呢,状态模式让我们代码具有很强的可读性,因为大家知道状态模式本身。他他本身就是处理一个就是就是不太,就是容易把大家写代码,写代码的时候容易把这个模块写乱的。这么一个问题,因为你状态经常变化,同学们还可以看到这个东西是吧?因为你看这样一个状态,如果我们不用状态模式来处理,我们就按这个流程用if else来处理,你想这个代码可维护性可是非常低的。如果你曾经做过项目,你就知道,如果我们针针对这种流程比较复杂的,我们动不动就用if else if else,这个代码的可读性将会非常的差。就几乎是不可控。几乎不可控,所以说我们说这个状态模式呢,让我们的代码具有很强的可读性,状态模式呢,将每个状态的行为封装到对应的一个内中。而且呢,它分辨维护为什么,因为将容易产生问题的if语句拿掉了。
01:05
如果每个状态的行为都放到一个类中,每次调用方法都要判断当前状态是什么的,不但会产生IFS,而且容易出错。但是呢,我们这个状态模式就把IFS拿掉了,而且有我们发现状态模式它是符合开辟原则的,因为我们这个状态可以动态的增加和删除,是不是OK,而且呢,呃,当然它有不足的地方,状态模式呢,它不足的地方是它会产生比较多的类,因为每个状态呢都有一个对应类,大家有没有发现在我们这个代码里面。就是解决借贷平台的时候,大家会发现这个类就已经变得很多了。他都首先实现,呃继承了abstract statement,你看这有一个两个三个,四个,五个六个对吧,有有六个,但是我个人认为啊,这个你很难很难去避免,因为你本身就很复杂,你的状态本身就很多,那没办法呀,对不对,所以说嗯,这个算是缺点呢,我觉得也不算,就是是只能说是状态模式给我们带来的一个,嗯,一个现象,大家要注意去维护哈,还有一点呢,当一个事件就什么时候,这个是它的应用场景。
02:16
这个是它的应用场景,就什么时候用比较合理呢?我总结了一下,就当一个事件或者对象有很多状态,状态之间会相互转换。就是这个状态会转换啊,比如说前面我讲的抽奖对吧,他他是先是一个不可抽奖,然后到了可抽奖,然后是发奖品,然后是无奖品可发,他的状态会相互变化,对于不同的状态呢,又有不同的行为。这个时候我们就考虑状态模式。也就是说说的再直接一点,就是针对有一个对象,这个对这个对象呢,OK,它呢有不同的状态。的状态一,状态二。OK,有不同的状态。
03:01
而而每个状态呢,又对应不同的行为。OK,这个状态对应这个行为,下面这个状态又又对应这个行为,好,那这个时候呢,我们又不希望把这个对象,对象变成一个全新的对象。当然如果说我们把变成一个全新的对象,那就是新的对象控制起来更麻烦,所以说我们只需要他的状态一变,行为就跟着改进,哎,就这个这个意思,明白我的意思吧,啊说他还是比较有意思的一个设计模式,所以说我们说在这种情况下呢,我们可以考虑使用状态模式,好同学们,我们现在把状态模式的内容呢,进行一个简单梳理,我们看一下我们是讲了哪些东西,来捋捋思路。好,我们插入一个分页符,这个种子讲的是状态模式。诶,这么写错了。状态模式。那状态模式,呃,我们仍然是通过一个问题展开的,我们先说了一个APP抽奖活动,引起大家思考,这样子吧。
04:05
那么APP抽奖活动呢,我们先说了,对,我们先说了一下他的具体的需求是什么。这样子的是不是?我们说了,他的需求如下。把需求说完了过后呢,我们这边还有一个对应的状,呃状态转换图,那也就是说如果我们以后用状态模式呢,我建议大家先把这个状态分析出来,也就说状态转换的一个。一个流程分析出来,你不然的话你无法分析出来到底有多少个状态,那你代码显然没法写啊,所以第一步呢,我们要分析出来有哪些状态,以及状态之间是怎么转的。第一点第二点我们我们紧接着呢,就直接说状态模式的基本介绍了。就状态模式到底它的概,从概念上来说,它是一个什么东西?好,我们这说了两点。对,我们这说了两点,哪两点呢,看一下。
05:00
首先,我们明确知道,状态模式的英文是state pattern。第二个呢,它是这样子的,就是对象内在的状态变化,是允许其行为变化。啊,这样子呢?从表面上看起来好像这个对象改成另外一个类的对象实例一样,但实际上并没有改变。说的再直接,就说对象状态变化了,行为也就相应的变化好,这是它的一个核心。当把基本内容介绍完了过后呢,我们就来说了一下它的一个原理类图,并且呢分析了状态,状态模式,他拥有的角色和角色对应的职责。是不是这样子的。好,这边呢,我们对他做了角色做了一个分析。然后呢,包含哪些角色,也给大家聊一下,把内图给大家拉过来。那图是在这画的,是不是同学们?当把类图画完了后呢,相信很多同学对状态模式应该还是无感的,因此呢,我们就用状态模式来解决了APP抽奖问题,加深了对他的认识。
06:08
好看。用APP来解决,那首先呢,我们整个一个应用实例的要求思路分析。对吧,诶,然后呢,代码实现。还是按照我们的老的流程,我们先画出了它的类图,类图在哪呢?应该是这个图。对吧,是这个图,好,我把这个类图给同学们拿过来,大家有看到在这里呢,我们其实就已经把四个状态体现出来了。这个是要我们分析的。然后呢,这边就相当于是把我们这些状态管理起来,也就是他可以理解成是一个context。好,我们把这个图拿过来放这。好,最后呢,我们走了代码。代码走完了过后呢,相信同学们对状态模式就有一个比较形象的,比较明确的认识,或者比较形象的认识了。好,我们是哪段代码是这个对吧,这一部分我直接在这压个包就行了。
07:05
OK state zip。把这个呢给同学们放到这里来,紧接着为了让大家对状态模式呢有一个较为深入的理解,我们找了一个项目,就是借贷平台的项目,来分析了一下,他是怎么去完成一个订单审核的啊,审核的一个模块。好,我们把它拿过来。这是第二个啊,这边呢,我们把它标成三号。OK。那这里我们看到if钥匙,我们这做了一个伪代码的分析和说明啊,这个呢,我们就截个图就行。Many,同学们。好,这是这个东西。OK,我放到这里来。那在这个分析的过程中呢,我们把这个模块的流程图还有代码都说了一下,流程图同学们,那就是这了,我就偷个懒哈,把它复制,这个我就不复制过来了,放这就行了好吗?放这就行了,把代码给他拿过来。
08:05
代码就是money。是money里面的吧,诶,压个包。OK啊,同学们。压个包就行。Money,这就是我们解决它的一个具体的代码。放这就行,诶放到这边来好吧。往这边来。好,当我们把这个讲完了以后呢,我们给大家整理一下状态模式的注意事项和它的一些细节。就是在使用的时候,状态模式有哪些地方需要同学们了解清楚哈。状态模式总的来说我个人认为还是一个非常不错的,尤其是它增强了我们代码的可读性,而且呢,也增强了我们的维护性。其实我们写代码不就是主要是要站在这个角度来考虑吗?至于他多了几个类,我觉得不是什么大事,对不对?而我多了一个类两个类,但是我的结构清晰了,这这当然是一件非常好的事情,我不能说为了省一个类两个类,结果代码变成了。
09:00
变得非常臃肿,那更不好,所以说呢,大家知道这个特点就行了,好,同学们那关于状态模式的内容梳理和注意事项就给大家说到这里。
我来说两句