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

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

前言

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

正文

状态模式的定义

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

       通常对于一般的设计模式,我们的关注点集中在对象的行为上,而不是对象的状态上,而状态模式相反,状态模式是一种封装对象的状态的设计模式。状态模式的关键在于区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。


状态模式的实现

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

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

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

640.png

状态模式的优缺点

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

  • 状态模式定义了状态和行为之间的关系,并将它们封装在类里,我们可以更加简单地新建新的状态和行为,符合开放-封闭原则
  • 避免主类因状态过多而导致地过度膨胀,状态的定义被分散到状态类中,并且也避免了主类中出现大量条件语句的问题用对象代替字符串表现状态,使得状态的切换更加一目了然

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

小结

今天我们学习了一种新的设计模式,状态模式,一般设计模式分离对象的行为,而状态模式不同,状态模式的关注点在于对象的状态,将对象的状态单独抽出维护,以避免主类的逻辑过于臃肿的情况

目录
相关文章
|
3月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 职责链模式
js设计模式【详解】—— 职责链模式
67 8
|
9天前
|
设计模式 Java 测试技术
Java设计模式-状态模式(18)
Java设计模式-状态模式(18)
|
2月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
2月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
21 0
|
2月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
3月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
46 7
|
3月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
52 6
|
3月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
42 6
|
3月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
41 6
|
3月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
73 0
下一篇
无影云桌面