你不知道的javascript设计模式(十六)----状态模式

发布于 2021-04-09 15:14

前言

        同学们,上一章我们介绍了装饰者模式,装饰者模式可以在不影响原类的情况下,给对象新增额外的功能,并且我们也尝试了使用AOP面向切面去拓展function的原型来实现装饰者模式。这一章,我们将进一步学习一种新的设计模式,状态模式。

正文

状态模式的定义

允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类

状态模式的实现

        引入一个很常见的场景,比如我们需要拿代码实现一个电灯开关的场景,我相信大部分同学的想法一定是用一个标识量去标识这个状态,根据标识量的切换,来切换电灯的状态,但是这种写法隐藏着一个问题,如果这盏电灯不止有两个状态,比如像酒店里一些灯可能还有旋转一闪一闪的效果,这时候就体现出了状态模式的优势,我们封装所有的状态模式,再对电灯的状态切换进行维护就可以了

        这里我们为了方便后面的实现,不妨假设这盏灯有三种模式,强光,弱光和关闭,按之前说的我们先封装一下这三种状态的类型

        然后我们再封装一下飞机类即可,在飞机类中为每个状态都创建一个状态对象,至于每个状态所做的行为操作我们只要委托给对应的状态类即可

状态模式的优缺点

        从上面的例子我们不难发现状态模式的优点:

  • 状态模式定义了状态和行为之间的关系,并将它们封装在类里,我们可以更加简单地新建新的状态和行为,符合开放-封闭原则

  • 避免主类因状态过多而导致地过度膨胀,状态的定义被分散到状态类中,并且也避免了主类中出现大量条件语句的问题用对象代替字符串表现状态,使得状态的切换更加一目了然

        但是状态模式也有一个明显的缺点,它会定义很多额外的状态类,逻辑被分散在状态类中,系统中也会因此增加不少额外的对象

小结

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材