当前位置: 首页 > news >正文

行为模式8.状态模式------灯泡状态切换

行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

当涉及状态模式时,它主要用于在对象的状态改变时改变其行为。状态模式允许对象在内部状态改变时改变它的行为,看起来好像是改变了它的类。

以下是状态模式的基本结构和示例:

结构

  1. Context(上下文):定义客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象。
  2. State(状态):定义一个接口以封装与Context的一个特定状态相关的行为。
  3. ConcreteState(具体状态):每一个具体状态类实现了与Context的一个状态相关的行为。

示例

让我们以一个简单的灯光控制器为例来说明状态模式。

// State 接口  
interface State {  void doAction(Context context);  
}  // ConcreteState 实现  
class OnState implements State {  public void doAction(Context context) {  System.out.println("Light is turned on");  context.setState(this);  }  
}  class OffState implements State {  public void doAction(Context context) {  System.out.println("Light is turned off");  context.setState(this);  }  
}  // Context 类  
class Context {  private State state;  public Context() {  state = null;  }  public void setState(State state) {  this.state = state;  }  public State getState() {  return state;  }  
}  // 使用示例  
public class StatePatternExample {  public static void main(String[] args) {  Context context = new Context();  State onState = new OnState();  onState.doAction(context);  State offState = new OffState();  offState.doAction(context);  }  
}  

在这个示例中,`Context` 表示灯光控制器,`State` 是一个接口,定义了状态改变时的行为。`OnState` 和 `OffState` 分别表示开和关的状态,它们实现了 `State` 接口来定义状态改变时的行为。在 `StatePatternExample` 中,我们创建了一个 `Context` 实例,并演示了状态从开到关的转变。

这就是状态模式的基本结构和一个简单示例。状态模式有助于在对象的状态变化时封装对象的行为,并使得状态转换更加清晰和易于维护。

状态模式和策略模式在某种程度上有一些相似之处,因为它们都涉及到在运行时改变对象的行为。

相似之处

  1. 封装算法/行为:两者都涉及将算法或行为封装到独立的类中,以便在运行时进行切换。
  2. 解耦:状态模式和策略模式都有助于将特定的行为与上下文对象解耦,使得它们可以独立地变化和复用。

不同之处

  1. 关注点:状态模式关注对象在不同状态下的行为变化,而策略模式关注在不同策略(算法)下的行为变化。
  2. 触发方式:状态模式的行为转换通常是由对象内部的状态改变触发的,而策略模式的行为转换通常是由客户端显式调用触发的。

总结

虽然这两种模式有相似之处,但它们的关注点和使用场景不同。状态模式适用于对象状态改变时的行为变化,而策略模式适用于根据不同的需求选择不同的算法或策略。理解它们之间的区别有助于选择适当的模式来解决特定的设计问题。

http://www.lryc.cn/news/397390.html

相关文章:

  • Linux账户和组管理——账户和工作组分类,用户账号文件,/etc/passwd文件中7个字段,id 命令
  • 《大明混一图》: 令人叹为观止的古代世界地图
  • Java高级重点知识点-22-缓冲流、转换流、序列化流、打印流
  • express民族民俗文化分享平台-计算机毕业设计源码22552
  • Web 基础与HTTP 协议
  • C++超市外卖小程序-计算机毕业设计源码62482
  • 合合信息“大模型加速器”亮相2024世界人工智能大会
  • 2024.07.03校招 实习 内推 面经
  • MySQL中的DDL语句
  • ENSP-防火墙小实验
  • PHP微信小程序视频图文流量主变现小程序系统源码
  • PHP智慧社区小区物业管理系统小程序源码
  • 手撸俄罗斯方块(五)——游戏主题
  • 【测试开发】--安全渗透测试
  • AMEYA360:类比半导体三款车规级新品介绍
  • 内衣洗衣机哪个牌子好用?五大硬核宝藏内衣洗衣机推荐
  • 红酒与未来科技:传统与创新的碰撞
  • php快速入门
  • 【排序 - 归并排序】
  • Appium元素定位(全网详细讲解)(二)
  • 滑动窗口,最长子序列最好的选择 -> O(N)
  • 【Python】已解决:Python安装过程中的报错问题
  • C++ STL IO流介绍
  • 华为浏览器,Chrome的平替,插件无缝连接
  • SpringBoot新手快速入门系列教程:前述
  • C语言9 指针
  • Floyd判圈算法——寻找重复数(C++)
  • 面试题目分享
  • Solana开发之Anchor框架
  • 界面组件Kendo UI for React 2024 Q2亮点 - 生成式AI集成、设计系统增强