首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS 状态模式

,这里可以使用状态模式来实现。...状态模式的思路是:首先创建一个状态对象或者数组,内部保存状态变量,然后内部封装好每种动作对应的状态,然后状态对象返回一个接口对象,它可以对内部的状态修改或者调用。...---- 本文是系列文章,可以相互参考印证,共同进步~ JS 抽象工厂模式 JS 工厂模式 JS 建造者模式 JS 原型模式 JS 单例模式 JS 回调模式 JS 外观模式 JS 适配器模式 JS 利用高阶函数实现函数缓存...(备忘模式) JS 状态模式 JS 桥接模式 JS 观察者模式 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 参考: 《Javascript 设计模式...》 - 张荣铭 设计模式状态模式

2.4K40

js 函数如何实现策略模式状态模式

前言 有关设计模式的学习资料中,大部分都是以 java 语言实现的,毕竟 java 作为老牌面向对象的语言最能说明设计模式的核心概念,所以 js 的相关设计模式的学习资料也大多使用 class 类实现...,本文记录下 js 使用函数实现策略模式状态模式设计模式的方式,更有助于理解策略模式状态模式如何在实际工作中运用。...,我们无法在一个地方就看出整个状态机的逻辑 相同点 都有一个上下文、一些策略或状态类 上下文把请求委托给这些类来执行 区别 状态模式 【不同事情 】状态模式状态之间的切换,做不同的事情; 【不能互相替换...】状态模式各个状态的同一方法做的是不同的事,不能互相替换,状态状态行为是早已被封封装好的,状态之间的切换也早被规定完成,改变模式这个行为发生在状态内部,使用者不需要了解改变的细节; 【封装状态状态模式封装了对象的状态...状态模式关注于对象的状态转换,而策略模式关注于将算法或行为封装到策略对象中,以便在运行时动态替换。

17410
您找到你想要的搜索结果了吗?
是的
没有找到

状态模式

状态模式定义: 英文定义:The State Pattern allows an object to alter its behavior when its internal state changes...中文定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。...把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 状态模式UML类图如下(摘自《Head First Design Pattern》): ?...有没有发现和策略模式的类图及其相似,其实状态模式和策略模式是一对孪生兄弟,其形式完全一致,只是使用意图不一样而已。 状态模式适用场景: 1....一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为 2. 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态

57520

状态模式

1.定义 状态模式中的行为是由状态来决定,不同的状态下有不同的行为。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。...2.实战演练 用户登录系统,同一个操作在不同状态下会有不同的操作 (1)先定义一个用户状态的接口 public interface UserState { /** * 转发...LoginContext.getInstance().setState(new LogOutState()); } }); 3.总结 1.优点 将所有与一个特定的状态相关的行为都放入一个状态对象中...,它提供了一个更好的方法来组织与特定状态相关的代码,将繁琐的状态判断转换成结构清晰的状态类族,在避免代码膨胀的同时也保证了可扩展性与可维护性。...2.缺点 状态模式的使用必然会增加系统类和对象的个数。

71830

设计模式状态模式(state模式状态模式的具体实例状态模式的分析

状态模式所表示的类,一般就不存在真实世界的某个东西,因为状态模式中的类是用来表示状态的。状态一般都是抽象的,所以往往没有具体对应于真实世界的对象。...但是状态模式确实从不同的角度来考虑问题。 状态模式会发现,这些不同的行为,主要依赖于两个状态,就是白天和晚上。...通话的方法 } 我们看到普通方法和状态模式的区别就是状态模式中,定义了状态类,就不需要if语句来判断了。...image.png 状态模式的分析 状态模式的角色: state状态 表示状态,定义了根据不同状态进行不同处理的接口,该接口是那些处理内容依赖于状态的方法集合,对应实例的state类 具体的状态 实现了...状态模式的类图: ? image.png

89120

状态模式

---- 状态设计模式 基本概念 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。...状态和行为是一一对应的,状态之间可以相互转换 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类 状态模式原理类图 对原理类图的说明(状态模式的角色及职责) Context 类为环境角色...因此代码会变得越来越臃肿,并且一旦没有处理某个状态,便会发生极其严重的BUG,难以维护 状态模式解决借贷平台案例 UML类图 代码实现 State(状态接口) public interface State...状态模式将每个状态的行为封装到对应的一个类中 方便维护。...每个状态都要一个对应的类,当状态过多时会产生很多类,加大维护难度 应用场景: 当一个事件或者对象有很多种状态状态之间会相互转换,对不同的状态要求有不同的行为的时候,可以考虑使用状态模式

13410

状态模式

今天要说的设计模式——状态模式,个人觉得非常有意思,因为此种设计模式的运用场景几乎可以说是每个程序里都可以用上。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。...我们同样来通俗一点解释,首先解释这种模式的运用场景,这种模式一般用在有大量if-else的分支判断上,不同的状态也就表示为不同的if条件,进入不同的if分支执行操作后就好像是改变了其类。...image.png 这就是状态模式的UML类结构图,其实在这里看UML类结构图还是有点蒙逼的样子,if-else分支这种场景经常遇到,比如在eclipse里会有一个checkstyle插件,在这个插件可以检查是否分支过多...但看了这个状态模式过后才知道其实不然,有大量的if-else分支判断,说明在这个类里它的责任过大,无论任何状态,都需要通过它来改变,而面向对象设计其实就是希望做到代码的责任分解。...说了那么多,我们直接实现代码来看,状态模式是如何做到将if-else分支分解的。

64390

状态模式

——狄更斯 我们在实现审核业务的时候,可能在没使用状态模式的时候,使用if else或者switch case进行操作 ruben说:我不能针对不同的状态写多个后端接口吗?...这里我们采用状态模式实现: 首先定义一个状态接口: package com.ruben.state.example; import java.util.Map; /** * 审核状态公共接口...executor.execute(param); System.out.println(result); executor.execute(param); } } 状态模式优点...将与特定状态相关的代码放在单独的类中。 开闭原则。 无需修改已有状态类和上下文就能引入新状态。 通过消除臃肿的状态机条件语句简化上下文代码。...状态模式缺点 如果状态机只有很少的几个状态, 或者很少发生改变, 那么应用该模式可能会显得小题大作。

36430

状态模式.

一、概念 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。这个模式状态封装成为独立的类,并将动作委托到代表当前状态的对象,我们知道行为会随着内部状态而改变。...然而,实际上,状态模式是在使用组合通过简单引用不同的状态对象来造成类改变的假象。 角色:  1、上下文(Context): 定义客户感兴趣的接口。通常负责具体状态的切换。...Context 会将行为委托给当前状态对象。 状态类可以被多个 Context 实例共享。 基本常识:策略模式状态模式时双胞胎(它们有相同的类图),在出生时才分开(它们的意图不同)。...策略模式状态模式有什么区别呢?  1、以状态模式而言,我们将一群行为封装在状态对象中,Context 的行为可委托到那些状态对象中的一个。...有了策略模式,我们可以通过组合不同的对象来改变行为。 使用状态模式通常会导致设计中类的数目大量增加。(这几乎是所有设计模式的通病)

49040

状态模式

状态模式允许在内部状态时改变它的行为,在外部看起来好像修改了类。状态模式可以延伸出状态机的概念,状态机据我自己所知在电商系统中用来控制订单状态的流转。...关于状态机,大家可以在评论中可以补充一下(状态机的更多应用场景)。 类图 ?...State:该类通常是一个接口或者抽象类,具体视情况而定 ConcreteState:具体的状态类,实现状态的控制 Context:具体需要使用状态的客户段,在其内部通常有各个状态的引用以及一个当前状态的引用...,当调用handle方法时,其实将方法的调用转发给给当前状态的handle方法去执行 场景模拟 下面我们模拟一个糖果机的场景,在该场景中我们简化了部分逻辑,毕竟我们只是为了了解学习状态模式,而不是实现一个真正的糖果机系统...首先我们需要一台糖果机,其次该机器有以下集中状态,待投币状态,已投币状态,售出糖果状态,售空状态。下面我们开始我们的状态分析,首先我们需要一个State接口。

40110

状态模式

状态模式 状态模式State Pattern是一种对象行为型模式,其以面向对象的方式实现状态机,使用状态模式,通过将每个单独的状态实现为状态模式接口的派生类,并通过调用由模式的超类定义的方法来实现状态转换...,来实现状态机,状态模式也可以解释为策略模式,它能够通过调用模式接口中定义的方法来切换当前策略。...,其内部状态就会改变,从而使得系统的行为也随之发生变化,状态模式允许一个对象在其内部状态改变时改变其行为,通常用于解决过多的if else条件分支问题。...状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。...状态模式对“开闭原则”的支持并不太好,对于可以切换状态状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。

20910

设计模式-状态模式

最近项目中有个项目是用到了状态得操作,比如从审核到审核通过再到审核查看审核中再到审核完成等一系列得状态。 看了一眼开发写的得代码,只能说有点想跑路得感觉,搂一眼这个代码。 ?...一大串if和else得判断,类似于这种工作流为核心得项目就应该用到状态模式啊!这也可能是当时项目急,压根就没有做设计,这样后续维护得人可就要混不下去了,光是代码就不想看了。...废话不说了,根据这个项目想到了一个设计模式状态模式,照着往上得一些资料写了一个demo。 看下流程: ? 设计UML : ? 包结构: ?...public void acceptOrderEvent(Context context) { // 把当前状态设置为 NotPayState 未付款状态 // 至于设置成什么状态...到此状态模式demo就初步完成了,虽然有点绕但是可读和可维护性还是非常好得。

40030

设计模式----状态模式

状态模式: 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 状态模式的结构: 环境(Context)角色,也称上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。...糖果机工作如上图所示,这个例子中,糖果机是环境,每一个圆圈都是一个具体状态,而每一个箭头都是状态之间的转换。 我们使用状态模式来重写代码: 首先定义一个state接口。...gumballMachine.getSoldOutState()); } } public String toString() { return "dispensing a gumball"; } } 要点: 状态模式允许一个对象基于内部状态而拥有不同的行为...和程序状态机(PSM)不同,状态模式用类代表状态。 Context会将行为委托给当前状态对象。 通过将每个状态封装进一个类,我们把以后需要做的任何改变局部化了。...状态模式和策略模式有相同的类图,但他们的意图不同。 使用状态模式通常会导致设计中类的数目大量增加。 状态类可以被多个Context实例共享。

51600

状态模式

状态模式 状态模式State Pattern是一种对象行为型模式,其以面向对象的方式实现状态机,使用状态模式,通过将每个单独的状态实现为状态模式接口的派生类,并通过调用由模式的超类定义的方法来实现状态转换...,来实现状态机,状态模式也可以解释为策略模式,它能够通过调用模式接口中定义的方法来切换当前策略。...,其内部状态就会改变,从而使得系统的行为也随之发生变化,状态模式允许一个对象在其内部状态改变时改变其行为,通常用于解决过多的if else条件分支问题。...状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。...状态模式对“开闭原则”的支持并不太好,对于可以切换状态状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态;而且修改某个状态类的行为也需修改对应类的源代码。

30300
领券