你好世界
  • 入门
  • 框架
  • Webpack
  • 模式
  • 知识点
  • 面试题
  • Koa
  • Java
  • Python
  • MongoDB
  • Redis
  • Algorithm
  • AI 概述
  • 机器学习
  • 深度学习
  • 自然语言处理
  • 关键词说明
  • 使用技巧
  • 本地模型安装及下载
  • 调试
  • 测试
  • GIT
  • Network
  • Linux
  • VSCode
  • GitHub
  • Mock
  • 入门
  • 框架
  • Webpack
  • 模式
  • 知识点
  • 面试题
  • Koa
  • Java
  • Python
  • MongoDB
  • Redis
  • Algorithm
  • AI 概述
  • 机器学习
  • 深度学习
  • 自然语言处理
  • 关键词说明
  • 使用技巧
  • 本地模型安装及下载
  • 调试
  • 测试
  • GIT
  • Network
  • Linux
  • VSCode
  • GitHub
  • Mock
  • DesignMode

    • 设计模式
    • 面向对象
    • UML 类图
    • 设计原则
    • 面试题分析
    • 工厂模式
    • 单例模式
    • 适配器模式
    • 装饰器模式
    • 代理模式
    • 外观模式(网关?)
    • 观察者模式
    • 迭代器模式
    • 状态模式
    • 其它设计模式
  • SoftwareArchitecturePatterns

    • SoftwareArchitecturePatterns (软件架构模式)
    • MVVC
    • MVC
    • MVP

状态模式

介绍

  • 一个对象有状态变化;
  • 每次状态变化都会触发一个逻辑;
  • 不能总是用if...else来控制;

设计原则验证

  • 将状态对象和主题对象分离,状态的变化逻辑单独处理;
  • 符合开放封闭原则;

示例

  • 交通信号灯不同颜色的变化;
示例-12
// 状态(红灯、绿灯、黄灯)
class State {
  constructor(color) {
    this.color = color
  }
  handle(context){
    console.log(`切换 为 ${this.color} 灯`);
    // 设置状态
    context.setState(this)
  }
}

// 主体
class Context {
  constructor(color) {
    this.state = null;
  }
  // 获取状态
  getState(){
    return this.state
  }
  setState(state){
    this.state = state
  }
}

// 测试
let context = new Context()
let green = new State('green');
let yellow = new State('yellow');
let red = new State('red');

// 绿灯亮了
green.handle(context);
console.log(context.getState()) // 打印状态

// 黄灯亮了
yellow.handle(context)
console.log(context.getState()) // 打印状态

// 红灯亮了
red.handle(context)
console.log(context.getState()) // 打印状态

场景

  • 有限状态机
    • 有限个状态、以及在这些状态之间的变化
    • 如交通信号灯
    • 开源lib:javascript-state-machine
    • 测试代码
  • 写一个简单的 Promise
最后更新时间: 3/7/22, 9:11 PM
贡献者: DESKTOP-ER5718D\zt
Prev
迭代器模式
Next
其它设计模式