【JS设计模式】状态模式的代码示例

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 06:02   36   0

1. 概述
  当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。


2. 解决的问题
  主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。


function Context( _state ) {
  this.state = _state;
  this.request = function() {
    this.state.Handle( this );
  }
}

function ConcreteStateA() {
  this.Handle = function( context ) {
    console.log("A");
    context.state = new ConcreteStateB();
  }
}

function ConcreteStateB() {
  this.Handle = function( context ) {
    console.log("B");
    context.state = new ConcreteStateA();
  }
}

// 设置Context的初始状态为ConcreteStateA
var context = new Context(new ConcreteStateA());
// 不断地进行请求,同时更改状态
context.request();
context.request();


状态模式的使用场景也特别明确,有如下两点:
一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

一个操作中含有大量的分支语句,而且这些分支语句依赖于该对象的状态。状态通常为一个或多个枚举常量的表示。


应用场景:

打电话有如下几种状态:获取电话号码、拨号中、通话中、通话结束。

这几种状态的顺序是以次进行的,那么我们就可以根据这几种状态来实现状态模式;

获取电话号码


拨号中


通话中


通话结束



不断地去调用这个方法context.request(); 来判断当前属于那种状态;


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP