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

设计模式-状态模式:让对象的行为随状态改变而清晰可控

🌟 引言

场景痛点:
你是否遇到过这样的代码?

if (state == "待支付") {
   
    // 处理待支付逻辑
} else if (state == "已支付") {
   
    // 处理已支付逻辑
} else if (...) {
   
    // 无限的条件分支...
}

条件分支爆炸导致代码臃肿、难以维护?状态模式正是解决这类问题的利器!

本文亮点:

  • 3个真实代码示例
  • 角色结构图 + 对比表格
  • JDK源码应用分析

一、状态模式是什么?

1.1 概念

状态模式(State Pattern) 是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。状态模式将对象的行为封装到不同的状态类中,使得对象在不同状态下有不同的行为表现。

简单来说,状态模式的核心思想是:将状态与行为分离,让对象的行为随着状态的改变而自动改变,而不是通过大量的条件判断来实现。

核心思想:

  • 状态与行为解耦:将每个状态的行为封装到独立类中。
  • 消除条件分支:通过多态实现状态切换,避免if-else嵌套。

1.2 举个栗子 🌰

想象一个自动售货机

  • 状态:待投币 → 已投币 → 售出 → 缺货
  • 行为:投币、退币、出货在不同状态下表现不同。
    用状态模式实现,代码将清晰如丝滑!

🔧 二、状态模式原理与结构

2.1 结构图

+-------------------+        +-------------------+
|      Context      |        |       State       |
|-------------------|        |-------------------|
| - state: State    |<-------| + handle(): void  |
| + setState(State) |        +-------------------+
| + request()       |                  ^
+-------------------+                  |
                                       |
                    +-----------------------------------+
                    |                                   |
            +-------------------+             +-------------------+
            | ConcreteStateA    |             | ConcreteStateB    |
            

http://www.kler.cn/a/535897.html

相关文章:

  • Llama最新开源大模型Llama3.1
  • 【华为OD-E卷 - 112 任务最优调度 100分(python、java、c++、js、c)】
  • VMware Win10下载安装教程(超详细)
  • 接口测试与常用接口测试工具
  • 【Linux】24.进程间通信(3)
  • k8s常见面试题2
  • 设计模式1:工厂模式
  • 软件模拟I2C案例(寄存器实现)
  • 基于微信小程序的在线点餐(堂食)平台的设计与实现ssm+论文源码调试讲解
  • .net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现
  • Python“鉴黄”小程序,自动识别检测物体的颜色
  • 【数据结构】(5) ArrayList 顺序表
  • 确保数据一致性:RabbitMQ 消息传递中的丢失与重复问题详解
  • 如何查看:Buildroot所使用Linux的版本号、gcc交叉编译工具所使用的Linux的版本号、开发板上运行的Linux系统的版本号
  • 使用外骨骼灵活远程控制协作机器人案例
  • 如何利用Java爬虫获取商品销量详情实战指南
  • Spring Boot 自动装配机制深度解析
  • VUE之组件通信(二)
  • Git 分支管理策略与实践
  • 怎麼在Chrome中設置代理伺服器?
  • MySQL 进阶专题:索引(索引原理/操作/优缺点/B+树)
  • 责任链模式(Chain Responsibility)
  • 深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战
  • HbuilderX中,实现Gzip的两种方法
  • 【数据结构-Trie树】力扣720. 词典中最长的单词
  • android 打包AAR-引入资源layout-安卓封包