设计模式之状态

简介: 设计模式之状态

状态模式介绍


状态模式是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。


根据状态不同,行为也不同


状态模式描述的是一个行为下的多种状态变更,比如我们最常见的一个网站的页面,在你登录与不登录时,用户看到的页面是不同的,而这种登录与不登录就是我们通过改变状态而让整个行为发生了变化。


状态模式建议为对象的所有可能状态新建一个类,然后将所有状态的对应行为抽取到这些类中。


原始对象被称为上下文,它并不会自行实现所有行为,而是会保存一个指向表示当前状态对象的引用,且将所有与状态相关的工作委派给该对象。


状态模式结构


  • 1、上下文


保存对于一个具体状态对象的引用,并会将所有与该状态相关的工作委派给它。上下文通过状态接口与状态对象交互,且会提供一个设置器用于传递新的状态对象。


  • 2、状态接口


会声明特定于状态的方法,这些方法应能被其他所有具体状态所理解,因为你不希望某些状态所拥有的方法永远不会被调用。


  • 3、具体状态


会自行实现特定于状态的方法。为了避免多个状态中包含相似代码,你可以提供一个封装有部分通用行为的中间抽象类。


  • 4、业务逻辑


上下文和具体状态都可以设置上下文的下个状态,并可通过替代连接到上下文的状态对象来完成实际的状态转换。


状态模式的应用场景


  • 对象需要根据自身当前状态进行不同行为,同时状态的数量非常多且与状态相关的代码会频繁变更的话。


  • 某个类需要根据成员变量的当前值改变自身行为,从而需要使用大量的条件语句时。


  • 当相似状态和基于条件的状态机转换中存在许多重复代码时,可使用状态模式。


实现方式


  • 确定那些类是上下文,声明状态接口。


  • 为每个实际状态创建一个继承与状态接口的类,然后检查上下文中的方法并将与特定状态相关的所有代码抽取到新建的类中。


  • 在上下文类中添加状态接口类型的引用成员变量。


  • 再次检查上下文中的方法,将空的条件语句替换为响应的状态对象方法。


  • 传递上下文状态。


满足单一职责原则和开闭原则。


Demo


该模式将与状态相关的行为抽取到独立的状态类中,让原对象将工作委派给这些类的实例,而不是自行进行处理。

状态模式可通过受外部控制且能根据对象状态改变行为的方法来识别。

抽象的状态类


实现抽象状态类


上下文类


客户端调用


输出结果


对于状态模式来说,还是得根据具体得业务场景去实现,就是当某个状态改变时,对应业务中有好多耦合得类也得对应做不同得变化时就可以使用状态模式。

目录
相关文章
|
6月前
|
设计模式 算法 C++
从 C++ 优化状态机实现:结合设计模式的实用指南
从 C++ 优化状态机实现:结合设计模式的实用指南
522 1
|
6月前
|
设计模式
状态模式--设计模式
状态模式--设计模式
41 0
|
设计模式 前端开发 数据安全/隐私保护
前端实现设计模式之状态模式
状态模式是一种行为型设计模式,用于在对象内部状态发生变化时改变其行为。状态模式将对象的行为封装在不同的状态类中,使得对象在不同的状态下可以有不同的行为。在前端开发中,状态模式常用于管理组件的状态和行为,以实现复杂的交互逻辑。本文将介绍状态模式的概念和应用,并提供具体的代码示例和解读。
163 0
|
6月前
|
设计模式 存储 前端开发
【设计模式】之调停者模式
调停者模式是一种有助于降低对象之间耦合度的设计模式。它通过引入一个调停者对象来集中处理一组对象之间的交互,使得代码更易于维护和扩展。在前端开发中,调停者模式可以应用于表单验证、消息订阅与发布、组件间通信等场景。尽管调停者模式可能会增加系统的复杂性,并且调停者对象可能变得庞大和复杂,但它仍然是一种有价值的设计模式,可以提高代码的可读性和可维护性。
65 0
【设计模式】之调停者模式
|
6月前
|
设计模式
二十三种设计模式-解密状态模式:优雅地管理对象状态
二十三种设计模式-解密状态模式:优雅地管理对象状态
|
设计模式 C++
二十三种设计模式:状态模式
状态模式,就是把所有的状态抽象成一个个具体的类,然后继承一个抽象状态类,在每一个状态类内封装对应状态的行为,符合开放封闭原则,当增加新的状态或减少状态时,只需修改关联的类即可。很适合多分支行为方法的处理,这里的多分支,当然是状态比较多的情况下,如果只有小于4个状态,个人认为还是分支处理简单些。
57 0
|
设计模式
状态设计模式解读
状态设计模式解读
|
设计模式 Java 编译器
设计模式学习(五):State状态模式
在面向对象编程中,是用类表示对象的。也就是说,程序的设计者需要考虑用类来表示什么东西。类对应的东西可能存在于真实世界中,也可能不存在于真实世界中。
157 0
设计模式学习(五):State状态模式
|
设计模式
设计模式(28) -- 状态模式
设计模式(28) -- 状态模式
设计模式(28) -- 状态模式