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

状态模式(State)

UML.png 模式的组成 环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态。...抽象状态类(State): 定义一个接口以封装与Context的一个特定状态相关的行为。 具体状态类(ConcreteState): 每一子类实现一个与Context的一个状态相关的行为。...本文状态模式的例子使用我们生活中的交通信号灯的例子。交通信号灯一共具有三种状态,红灯,绿灯,黄灯,在这三种状态之间相互切换。...因为这一章节介绍的是状态模式,所以我们采用此方式来进行设计,其他的方式LZ也试过,也可以,不过如果是不同的状态之间带着关联,且不同状态拥有不同行为的,推荐状态模式,废话不多话,开始Lu代码 上面我们说到状态模式的组成分为三个...: 环境类(Context) 抽象状态类(State) 具体状态类(ConcreteState) 就算有每一个的解释,我们还是不能很好的理解意思,接下来我用一个通俗的方式来说明。

50821

State状态模式

且分为只读文档、只改文档、只写文档,且在编写代码时,他们的RUW(R-Read)功能各不相同,即每一类的状态文档,在运行时,他们的Read、Write、Update的代码逻辑各不相同,这个时候该如何通过状态模式编写代码...,很显然,如果不用State模式,可以通过if else或者swith可以很轻松的完成需求.但是那样的代码耦合度高,且修改时,代价太大,容易影响现有代码的逻辑,给测试增加压力,因为你每一次对单一文档对象的修改都会影响其他所有文档对象的运行....下面使用State状态模式来完成这个需求. 3、代码实战 public static void Main(string[] args) { var manager =...ok,可以看到state状态模式很好的完成了需求,而且每当用户提出一种新的需求,如编写一个只读只写文档,你就可以通过扩展类的方式,通过编写一个只读只写文档类,来完成他的需求,而且每次发布模块,只需要测新类型的功能是否...ok,不需要测其他的功能,因为状态模式是符合开闭原则,对扩展方法,对修改关闭.且所有的上下文共享一个State对象,各个状态文档对象通过子类的方法展现,如果状态发生改变,那么其状态下的方法全都会改变.

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

    状态模式(State)

    意图 状态模式是一种行为型模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。 它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。...即使你之前从未听说过有限状态机,你也很可能已经实现过状态模式。下面的代码应该能帮助你回忆起来。...状态模式建议为对象的所有可能状态新建一个类,然后将所有状态的对应行为抽取到这些类中。...这个结构可能看上去与策略模式相似,但有一个关键性的不同————在状态模式中,特定状态知道其他所有状态的存在,且能触发从一个状态到另一个状态的转换;策略则几乎完全不知道其他策略的存在。...参考原文:状态设计模式

    43120

    设计模式-状态模式State

    设计模式-状态模式 关注公众号 JavaStorm ,技术成长一手掌握。 允许对象在内部状态改变的时候改变它的行为,对象看起来好像修改了它的类。...抽象状态(State)角色:定义一个所有具体状态的共同接口,用来封装环境角色对象的一个特定状态的行为。...通过使用多态性原则, 可以动态改变环境类Context的属性State的内容,使其从指向一个具体状态类变换到指向另一个具体状态类, 从而使环境类的行为request()由不同的具体状态类来执行。...策略模式与状态模式对比 状态模式:不同的状态标表示不同的行为,对应不同的处理方式。 策略模式:同一个行为,不同处理。因此在同一个行为发生的时候,可以根据条件挑选任意一个实现来进行相应的处理。...关于策略模式,读者可以阅读历史文章-策略模式

    43510

    状态模式(state pattern)

    begin 2020年11月14日20:19:59 状态模式(state pattern) 引子 铁扇公主:以前陪我看月亮的时候,叫人家小甜甜,现在新人胜旧人了,叫人家牛夫人!...——《设计模式:可复用面向对象软件的基础》 状态模式是一个行为型设计模式。 概述 状态模式的概念和有限状态机(finite-state machine)相似。...与策略模式对比 如果状态模式提供外部接口,使得其他对象可以知道Context包含的状态,且能改变Context的状态,状态模式就变成了一个策略模式,每种状态就是一种策略。...但是状态模式的状态一般是不变的,策略模式是可以随意添加策略的,而不影响其他策略。...优点 符合设计模式六大原则中的单一职责原则 封装与状态的行为到一个类中,降低耦合,增加可维护性 缺点 增加系统类个数,增加系统复杂性 总结 状态模式是一个行为型设计模式,角色有三个:上下文角色、抽象状态类

    30920

    精读《设计模式 - State 状态模式

    State(状态模式State(状态模式)属于行为型模式。 意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。...结构图 State: 状态接口,类比为台灯状态。 ConcreteState: 具体状态,都继承于 State,类比为台灯的强光、弱光状态。 代码例子 下面例子使用 typescript 编写。...// 定义状态接口 interface State { // 模拟台灯点亮 show: () => string } class Light1 implements State { constructor...: State) { this.currentState = state } // 按下按钮 public click() { this.getState().click(...讨论地址是:精读《设计模式 - State 状态模式》· Issue #303 · dt-fe/weekly 版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)

    27510

    设计模式之 —— 状态模式 State

    状态模式的解决思想是:当控制一个对象状态转换的条件表达式过于复杂时,把相关 “判断逻辑” 提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的 状态类对象 进行处理,这样能把原来复杂的逻辑判断简单化...this.liftState.run(); } public void stop() { this.liftState.stop(); } } 这就是状态模式...定义 状态模式的核心是封装。它把受环境改变的对象行为 包装在 不同的状态对象里,其意图是让一个对象在其内部状态改变的时候,其行为也随之改变。 状态模式包含以下主要角色。...final static State STATE2 = new ConcreteState2(); //当前状态 private State CurrentState; //获得当前状态...---- 状态模式的使用场景: 行为随状态改变而改变的场景; 条件、分支判断语句的替代者; 状态模式适用于当某个对象在他的状态发生改变时,它的行为也随着发生比较大的变化,在使用时对象的状态最好不要超过

    45040

    设计模式实战-状态模式(State Pattern)

    3 架构 Context:环境类 State:抽象状态类 ConcreteState:具体状态类 4 意义 解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。...在状态模式结构中需要理解环境类与抽象状态类的作用: 环境类实际上就是拥有状态的对象,环境类有时候可以充当状态管理器(State Manager),可在环境类中对状态进行切换操作。...使用状态模式可以描述工作流对象(如批文)的状态转换以及不同状态下它所具有的行为。 9 案例代码 ? State 接口 ? 实现 State 接口的实体状态类 ?...简单状态模式与可切换状态的状态模式 简单状态模式 状态都相互独立,状态之间无须进行转换的状态模式,这是最简单的一种状态模式。...状态模式包含三个角色:环境类又称为上下文类,它是拥有状态的对象,在环境类中维护一个抽象状态类State的实例,这个实例定义当前状态,在具体实现时,它是一个State子类的对象,可以定义初始状态;抽象状态类用于定义一个接口以封装与环境类的一个特定状态相关的行为

    88820

    17.设计模式--状态模式(State模式)

    1.定义 状态模式也是一种行为型模式,允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。...电梯停止了... 2.状态模式实现 电梯运行终极版 现在知道电梯的运行代码存在的问题后,我们尝试使用状态模式进行更改。...状态模式将所有的状态抽象为对应的类,然后都继承于LiftState,这样就保证了所有的状态是一致性的。同时使用Context来引用不同的状态,然后根据不同的情况进行状态的流转。...状态模式中的角色 State(状态),State角色,定义了不同的状态,例如电梯的所有状态的抽象,文中由LiftState扮演此角色 ConcreteState(具体的角色),ConcreteState...参考文献《设计模式之禅》 代码获取地址:https://gitee.com/bughong/design-pattern

    30730

    C++设计模式——State状态模式

    一,状态模式的定义 状态模式是一种行为型设计模式,状态模式允许对象在内部状态发生切换时改变它自身的行为。...状态模式使得状态的切换被表现为类对象的切换。 状态模式在现实生活中的抽象实例: 交通信号灯:交通信号灯有红灯、绿灯等多种状态。每个状态都定义了不同的行驶规则。...对应UML类图: 三,状态模式代码样例 #include class State { public: virtual ~State() {} virtual void...A Handling state B 四,状态模式的应用场景 网络管理:网络编程中经常涉及多种网络状态切换,比如发送请求、断开连接等。...五,状态模式的优缺点 状态模式的优点: 修改灵活,当系统需求变化时,可以方便地添加、删除或修改状态,无需修改大量代码。 扩展性强,方便添加新的状态。

    11310

    状态模式state_解释器模式

    状态模式 State 动机 模式定义 实例 结构 要点总结 笔记 动机 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能不同...state = Network_Close; } } void process3(){ //...} } 状态模式State enum NetworkState{...pState->Operation3(); pState = pState->pNext(); //.. } } 结构 要点总结 State模式将所有与一个特定状态相关的行为都放入一个...State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦 笔记 跟Strategy模式很像 if else 再添加else变更的时候违背了开闭原则...State设计模式当状态中只有一个行为的时候跟strategy基本一样 很多模式其实很像 甚至可以把状态模式和Strategy模式看成一个模式 具体什么模式没那么重要 主要是思想 把所有和状态有关的操作都转换为装填对象的行为

    14020

    状态模式State Design Pattern)

    以此回顾《设计模式之禅》及其他设计模式书籍、视频中的状态模式。 什么是状态模式?...这个对象看起来像是改变了类) 状态模式有3个重要部分。(1)Context(Account)(2)State (3)Concrete State 如何理解状态模式中的Context?...持有一个定义了当前状态的实例,这个“当前状态”就是一个具体状态(ConcreteState),实现了State,是State的子集。 如何理解状态模式中的State?...如何理解状态模式中的Concrete State?...理解了这3个部分,再看定义,不难发现,状态模式其实就是说,当context持有的某个状态(concrete state)改变时,它的行为也发生了改变(因为每个concrete statestate接口中定义的方法的实现不同

    50810

    23种设计模式之状态模式State

    所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。 在状态模式State Pattern)中,类的行为是基于它的状态改变的。...这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。...状态模式和策略模式有相同的类图,但是它们的意图不同 策略模式通常会用行为或算法来配置Context类 状态模式允许Context随着状态的改变而改变行为 状态转换可以由State类或Context类控制...状态模式的结构和实现 模式结构 Context:是一个上下文类,它可以拥有一些内部状态 State:内部状态,根据不同状态实现不同行为 模式实现 我们将创建一个 State 接口和实现了 State...(State state){ this.state = state; } public State getState(){ return state;

    39620

    浅谈JAVA设计模式之——状态模式State

    State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。 三、参与者 Context 定义客户感兴趣的接口。...State 定义一个接口以封装与Context的一个特定状态相关的行为。 ConcreteStatesubclasses 每一子类实现一个与Context的一个状态相关的行为。 四、类图 ?...五、示例 Context package com.lyz.design.state; /** * Context * @author binghe * */ public class Context...this.weather; } public String weatherMessage() { return weather.getWeather(); } } State...package com.lyz.design.state; /** * State * @author binghe * */ public interface Weather {

    72210
    领券