广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >State状态模式怎么实现
  • 419
分享到

State状态模式怎么实现

2024-04-02 19:04:59 419人浏览 薄情痞子
摘要

本文小编为大家详细介绍“State状态模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“State状态模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 举例

本文小编为大家详细介绍“State状态模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“State状态模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

举例子

团队接口人

团队是由很多同学组成的,但有一位接口人 TL,这位 TL 可能一会儿和产品经理谈需求,一会儿和其他 TL 谈规划,一会儿和 HR 谈人事,总之要做很多事情,很显然一个人是忙不过来的。TL 通过将任务分发给团队中每个同学,而不让他们直接和产品经理、其他 TL、HR 接触,那么这位 TL 的办事效率就会相当高,因为每个同学只负责一块具体的业务,而 TL 在不同时刻叫上不同的同学,让他们出面解决他们负责的专业领域问题,那么在外面看,这位 TL 团队能力很广,在内看,每个人负责的事情也比较单一。

台灯按钮

我们经常会看到只有一个按钮的台灯,但是可以通过按钮调节亮度,大概是如下一个循环 “关 -> 弱光 -> 亮 -> 强光 -> 关”,那么每次按按钮后,要跳转到什么状态,其实和当前状态有关。我们可以用 if else 解决这个问题,也可以用状态模式解决。

用状态模式解决,就是将这四个状态封装为四个类,每个类都执行按下按钮后要跳转到的状态,这样未来新增一种模式,只要改变部分类即可。

数据库连接器

数据库连接前后,这个连接器的状态显然非常不同,我们如果仅用一个类描述数据库连接器,则内部免不了写大量分支语句进行状态判断。那么此时有更好的方案吗?状态模式告诉我们,可以创建多个不同状态类,比如连接前、连接中、连接后三种状态类,在不同时刻内部会替换为不同的子类,它们都继承同样的父类,所以外面看上去不需要感知内部的状态变化,内部又可以进行状态拆分,进行更好的维护。

意图解释

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

重点在 “内部状态” 的理解,也就是状态改变是由对象内部触发的,而不是外部,所以 外部根本无需关心对象是否用了状态模式,拿数据库连接器的例子来说,不管这个类是用 if else 堆砌的,还是用状态模式做的,都完全不妨碍它对外提供的稳定 api(接口问题),所以状态模式实质上是一种内聚的设计模式

结构图

State: 状态接口,类比为台灯状态。

ConcreteState: 具体状态,都继承于 State,类比为台灯的强光、弱光状态。

代码例子

下面例子使用 typescript 编写。

// 定义状态接口

interface State {

  // 模拟台灯点亮

  show: () => string

}

class Light1 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '关灯'

  }

  // 按下按钮

  public click() {

    this.context.setState(new Light2(this.context))

  }

}

class Light2 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '弱光'

  }

  // 按下按钮

  public click() {

    this.context.setState(new Light3(this.context))

  }

}

class Light3 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '亮'

  }

  // 按下按钮

  public click() {

    this.context.setState(new Light4(this.context))

  }

}

class Light4 implements State {

  constructor(context: Context) {

    this.context = context

  }

  show() {

    return '强光'

  }

  // 按下按钮

  public click() {

    this.context.setState(new Light1(this.context))

  }

}

// 台灯

public class Lamp {

  // 当前状态

  private currentState = new Light1(this)

  protected setState(state: State) {

    this.currentState = state

  }

  // 按下按钮

  public click() {

    this.getState().click()

  }

}

const lamp = new Lamp() // 关闭

lamp.click() // 弱光

lamp.click() // 亮

lamp.click() // 强光

lamp.click() // 关闭

其实有很多种方式来实现,不必拘泥于形式,大体上只要保证由多个类实现不同状态,每个类实现到下一个状态切换就好了。

读到这里,这篇“State状态模式怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网node.js频道。

--结束END--

本文标题: State状态模式怎么实现

本文链接: https://www.lsjlt.com/news/96446.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • State状态模式怎么实现
    本文小编为大家详细介绍“State状态模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“State状态模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 举例...
    99+
    2022-10-19
  • 怎么在java项目中使用State状态模式
    这期内容当中小编将会给大家带来有关怎么在java项目中使用State状态模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java 之State状态模式在状态模式中,一个类的行为基于它的状态的改变而改变。...
    99+
    2023-05-31
    java state ava
  • .Net行为型设计模式之状态模式(State)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、状态模式的代码实现六、状态模式的实现要点:1、状态模式的优点2、状态模式的缺...
    99+
    2022-11-13
  • C#中对象状态模式怎么实现
    这篇文章主要介绍了C#中对象状态模式怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中对象状态模式怎么实现文章都会有所收获,下面我们一起来看看吧。定义枚举表示教程进度首先用一个枚举,表示教程进行的不同...
    99+
    2023-06-30
  • .Net行为型设计模式之状态模式怎么实现
    这篇文章主要介绍“.Net行为型设计模式之状态模式怎么实现”,在日常操作中,相信很多人在.Net行为型设计模式之状态模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net行为型设计模式之状态模式怎...
    99+
    2023-06-30
  • Java状态设计模式实现对象状态转换的优雅方式
    目录介绍实现总结优点缺点应用场景介绍 Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦,它允许...
    99+
    2023-05-17
    Java状态设计模式 状态模式实现对象状态转换
  • React State状态与生命周期的实现方法
    一、实现组件的方法: 组件名称首字母必须大写 1.通过JS函数方式实现组件 <div id="app"></div> <script type="t...
    99+
    2022-11-11
  • android沉浸式状态栏怎么实现
    要实现Android沉浸式状态栏,可以按照以下步骤进行操作:1. 在styles.xml文件中定义一个没有ActionBar的主题,...
    99+
    2023-09-27
    android
  • 怎么用状态模式代替if-else
    本篇内容主要讲解“怎么用状态模式代替if-else”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用状态模式代替if-else”吧!简介状态模式是行为型设计模...
    99+
    2022-10-19
  • vue状态管理模式之vuex如何实现
    小编给大家分享一下vue状态管理模式之vuex如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、初始vuex1.1 vu...
    99+
    2022-10-19
  • vue store之状态管理模式如何实现
    这篇文章给大家分享的是有关vue store之状态管理模式如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。状态管理一、状态管理(vuex)简介uex是专为vue.js应用程...
    99+
    2022-10-19
  • Android中怎么实现沉浸式状态栏
    这篇文章给大家介绍Android中怎么实现沉浸式状态栏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在布局文件中第一个控件(一般是imageview或者textview)中添加两个属性。<!--沉浸式-->...
    99+
    2023-05-30
    android
  • vue怎么使用Vuex状态管理模式
    这篇“vue怎么使用Vuex状态管理模式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么使用Vuex状态管理模式”文...
    99+
    2023-06-29
  • Python设计模式中的状态模式是什么
    这篇文章将为大家详细讲解有关Python设计模式中的状态模式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。状态模式状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。优点:封装了状态...
    99+
    2023-06-29
  • Java状态机怎么实现
    今天小编给大家分享一下Java状态机怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。假设我们有两个状态这个状态转换非常...
    99+
    2023-07-06
  • C语言实现进程5状态模型的状态机
    目录前言什么是状态机定义举例四大概念状态机的应用进程5状态模型实现前言 状态机在实际工作开发中应用非常广泛,在刚进入公司的时候,根据公司产品做流程图的时候,发现自己经常会漏了这样或那...
    99+
    2022-11-13
    C语言 进程5状态模型 状态机 C语言 进程5状态模型 C语言 状态机
  • Python设计模式中如何使用状态模式实现编辑功能
    Python设计模式中如何使用状态模式实现编辑功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。功能介绍新增对象选择,连接线编辑功能。新增对象选择状态表示,连接...
    99+
    2023-06-19
  • Java动态代理模式怎么实现
    这篇文章主要介绍“Java动态代理模式怎么实现”,在日常操作中,相信很多人在Java动态代理模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java动态代理模式怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • Android实现沉浸式状态栏
    前段时间,项目中用到了沉浸式的状态栏,在此记录一下,代码如下: package com.jackie.immersive; import android.os.Build;...
    99+
    2022-06-06
    沉浸式状态栏 状态栏 Android
  • Android沉浸式状态栏实现
    苹果上的UI基本上都是这个效果,然而Android机上的顶部状态栏总是和app的主题颜色不搭。还好如今的api19以上的版本,我们也能做出这样的效果。 第一步: // ...
    99+
    2022-06-06
    状态栏 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作