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

【再谈设计模式】状态模式~对象行为的状态驱动者

一、引言

        在软件开发,软将工程,软件设计过程中,我们常常会遇到对象的行为依赖于其状态的情况。例如,一个任务对象可能有“未开始”、“进行中”、“已完成”等状态,并且在不同状态下执行相同操作会有不同的结果。传统的方法可能会使用大量的条件判断语句来处理不同状态下的行为,这使得代码复杂、难以维护且不易扩展。而状态模式提供了一种优雅的解决方案,它允许对象在内部状态改变时改变其行为,看起来就像是修改了类本身。

二、定义与描述

        状态模式属于行为型设计模式。它将对象的行为封装在不同的状态类中,使得对象在不同的状态下表现出不同的行为。在状态模式中,有以下几个主要角色:

  • 上下文(Context):这是一个包含状态对象的类,它定义了客户感兴趣的接口,并维护一个具体状态对象的引用。上下文将操作委托给当前的状态对象来处理。
  • 抽象状态(State):这是一个抽象类或者接口,它定义了一个特定状态下的行为接口。所有具体的状态类都实现这个接口。
  • 具体状态(Concrete State):这些是实现抽象状态接口的类,每个具体状态类实现了与该状态相关的行为。

三、抽象背景

        考虑一个简单的订单处理系统。订单有不同的状态,如“已下单”、“已付款”、“已发货”、“已完成”等。在传统的设计中,如果要处理订单在不同状态下的操作(如显示订单状态、执行下一个流程等),可能会有如下的代码:

public class Order {
    private String state;
    public Order(String state) {
        this.state = state;
    }
    public void process() {
        if ("已下单".equals(state)) {
            System.out.println("订单已下单,等待付款");
        } else if ("已付款".equals(state)) {
            System.out.println("订单已付款,准备发货");
        } else if ("已发货".equals(state)) {
            System.out.println("订单已发货,等待收货");
        } else if ("已完成".equals(state)) {
            System.out.println("订单已完成");
        }
    }
}

        这种代码随着状态的增加和操作的复杂化会变得非常难以维护。而使用状态模式可以将每个状态的行为封装到独立的类中,使得代码结构更加清晰。

四、适用场景与现实问题解决

(一)适用场景


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

相关文章:

  • 论文阅读--LlaVA
  • 归一化与伪彩:LabVIEW图像处理的区别
  • idea启动报错# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffccf76e433
  • 蓝桥杯备赛——进制转化相关问题
  • 网络安全威胁框架与入侵分析模型概述
  • leetcode59_螺旋矩阵II
  • 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)
  • 【算法】动态规划专题⑨ —— 二维费用背包问题 python
  • 如何衡量您的文化
  • LeetCode:503.下一个更大元素II
  • 正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
  • 半导体行业跨网文件交换系统
  • declare和less
  • IDEA - 一个启动类多次启动方法
  • 解决ModuleNotFoundError: No module named ‘tomli‘
  • 使用Feign代替RestTemplet
  • 【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现
  • 存储异常导致的Oracle重大生产故障
  • java练习(12)
  • 网络安全:挑战、技术与未来发展
  • 青少年编程与数学 02-008 Pyhon语言编程基础 26课题、常见框架
  • MariaDB *MaxScale*实现mysql8读写分离
  • LLM学习笔记1——本地部署Meta-Llama-3.2-1B大模型
  • 【网络工程师软考版】局域网与城域网
  • 网络HTTP详细讲解
  • C++ CRTP:奇异递归模板模式的原理与应用