设计模式之状态模式(个人笔记)

       本次小生~给各位简单介绍下状态模式,

               好了,接下来,我们先来看看状态模式的定义吧。

               状态模式定义如下:

                        State Pattern :Allow an Object to alter its behavior when its internal state changes.

                                                  The object will appear to change its class.

                        状态模式:当一个对象的内在状态改变时允许改变其行为,

                                          这个对象看起来像是改变了其类。(源于 Java 设计模式)

               上述是 百度百科 中对状态模式的定义,定义很简单,只有一句话,请各位形象的去理解这句话,

               它说当状态改变时,这个对象的行为也会变,而看起来就像是这个类改变了一样。

               就拿人来举例子,有些人一旦发生过什么事以后,就像变了个人似的,这句话其实与状态模式有异曲同工之妙。

               

               我们仔细体会一下定义当中的要点。

                       1、有一个对象,它是有状态的。

                       2、这个对象在状态不同的时候,行为不一样。

                       3、这些状态是可以切换的,而非毫无关系。

                 前两点比较好理解,第3点有时候容易给人比较迷惑的感觉,什么叫这些状态是可以切换的,而非毫无关系?

 

                 举个例子,比如最近特别火的 MOBA (即时类) 游戏  王者荣耀。此下用荣耀代替王者荣耀

                荣耀里的英雄有很多状态,比如正常,眩晕,加速,减速等等。

               相信就算没有玩过荣耀的朋友们,在其它游戏里也能见到类似的情况。

               那么假设我们的荣耀没有使用状态模式,则我们的英雄类会非常复杂和难以维护。

               我们的JAVA(英雄)类当中有明显的if...else...结构,我们再来看看百度百科中状态模式所解决的问题的描述。

               

               状态模式解决的问题:状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。

                                                   把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

                不用说,状态模式是可以解决我们上面的if else结构的,我们采用状态模式,

                利用多态的特性可以消除掉if...else...结构。这样所带来的好处就是可以大大的增加程序的可维护性与扩展性。

 

                对于一个 JAVA 类中有一大堆 if...else...  我们使用状态模式之后,有几个明显的优点:

  

           状态模式优缺点介绍

                         优点:

                                 一、结构清晰,避免了过多的switch...caseif...else语句的使用;

                                 二、遵循设计原则,每个状态就是一个子类;

                                 三、封装性非常好,将状态变换放置到类的内部来实现;

                         缺点:

                                一、子类会太多,也就是类膨胀,有多少个状态,就会有多少个子类;

                         应用场景:

                                一、行为随状态改变而改变的场景,如权限设计;

                                二、条件、分支判断语句的替代者,通过扩展子类实现条件的判断处理;

                                三、状态的个数最好不要超过5个;

 

                          状态模式在项目当中也算是较经常会碰到的一个设计模式,但是通常情况下,

                  我们还是在看到if...else...的情况下,对项目进行重构时使用,

                  又或者你十分确定要做的项目会朝着状态模式发展,一般情况下,还是不建议在项目的初期使用。

 

                  该设计模式 适用于 由于状态不同,操作不同, 多个分支的情况下 用它优化

 

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页