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

手表网站排行榜个人网站备案申请

手表网站排行榜,个人网站备案申请,手机软件开发入门教程,网页版qq为什么登录不了在日常开发中,我们经常会遇到这样的场景:一个对象在不同时刻有不同的状态,不同状态下它的行为也会发生变化。此时,使用大量if...else或switch语句会让代码变得混乱而难以维护。为了更优雅地应对这种问题,状态模式(Stat…

        在日常开发中,我们经常会遇到这样的场景:一个对象在不同时刻有不同的状态,不同状态下它的行为也会发生变化。此时,使用大量if...else或switch语句会让代码变得混乱而难以维护。为了更优雅地应对这种问题,状态模式(State Pattern)应运而生。

1. 概念

        状态模式是行为型模式之一。它允许一个对象在其内部状态发生变化,改变它的行为,看起来就像修改了它的类一样。

简单来说:对象的行为取决于它的状态,并且可以在运行时根据状态改变行为。

状态模式主要包含以下角色:

环境类(Context): 也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。

抽象状态类(State): 定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。

具体状态类(Concrete State): 实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。

2. 代码实现

        这里我们以一个简单的订单状态来举例,我们一个订单可能拥有很多状态,比如代付款、待发货、已发货、已完成等状态,这里我们就来模拟一下一个订单完成的全状态。

        我们首先定义抽象状态,以及其相关实现:

public interface OrderState {void handle();
}
public class PendingPaymentState implements OrderState {public void handle() {System.out.println("订单待付款,提示用户付款...");}
}public class PaidState implements OrderState {public void handle() {System.out.println("订单已付款,准备发货...");}
}public class ShippedState implements OrderState {public void handle() {System.out.println("订单已发货,等待确认收货...");}
}public class CompletedState implements OrderState {public void handle() {System.out.println("订单已完成,谢谢惠顾!");}
}

其次我们定义一个环境类:

public class OrderContext {private OrderState state;public void setState(OrderState state) {this.state = state;}public void request() {if (state == null) {throw new IllegalStateException("订单状态未设置!");}state.handle();}
}

最后我们定义一个测试类:

public class Main {public static void main(String[] args) {OrderContext order = new OrderContext();order.setState(new PendingPaymentState());order.request(); // 输出:订单待付款,提示用户付款...order.setState(new PaidState());order.request(); // 输出:订单已付款,准备发货...order.setState(new ShippedState());order.request(); // 输出:订单已发货,等待确认收货...order.setState(new CompletedState());order.request(); // 输出:订单已完成,谢谢惠顾!}
}

        其实经验丰富的程序员可以联想到一个词:那就是状态机,我们也可以对上述的案例进行进一步的加强,比如可以让每一个状态都拥有切换状态的行为,这样环境类可以直接形成一个状态流程,可以通过调用该状态的方法就可以实现与其他状态的关联。

3. 应用场景

  • 流程框架
  • 状态机
  • ......

4. 总结

        使用状态模式可以让我们的业务逻辑更加的清晰,并且具有更高的扩展性,同时符合开闭原则,可以让我们业务代码避免过于臃肿。但是缺点在于会增加我们类的数量,我们业务每次增加一个状态就会添加一个新的状态实现类,但是其实比起if...else还是更加优雅的。

        其实状态模式用好了对于我们开发人员来说是跟提高我们代码的可读性,比如目前我所工作的项目中就有应用到,我也深刻体会到了状态模式扩展性的作用有多高。

http://www.dtcms.com/a/536994.html

相关文章:

  • [无人机sdk] MissionManager | WaypointMission | HotpointMission
  • UGUI源码剖析(16):实战——从零构建一个RadialSlider
  • 做网站要分几部分完成南京做网站公司哪家好
  • 软件测试和DevOps的关系
  • 【vllm】源码解读:DeepSeekV2 DP Rank 专家加载与分配机制
  • YOLOv5 代码深度解析总结
  • 钓鱼网站的制作教程全球网站排行榜
  • 解决 Codex 在 WSL/SSH/VSCODE 登录时报 “Token exchange failed: 403 Forbidden” 问题
  • JS逆向——encrypt-labs实现爆破登录
  • 扬中网站建设流程如何运营好一个网站
  • 公司网站推广计划书wordpress页面新建不了
  • 防爆手机与普通的区别:应用场景、功能、未来发展
  • 阿里云可以做网站wordpress自动加载
  • IGS 转换为 3DXML 全流程:迪威模型网在线实操 + 本地方案指南
  • 【论文精读】VBench:视频生成模型的全方位评估基准套件
  • jsp网站开发模式wap自助建论坛网站
  • WEBSTORM前端 —— 第5章:Web APIs —— 第6节:正则阶段案例
  • 长春 万网 网站建设千年之恋网页设计代码
  • h5游戏免费下载:保护鸡蛋
  • node+pupeteer使用socks5作为代理协议
  • 光亚鸿道全资子公司科东软件通过2025专精特新 “小巨人” 企业认定
  • 北京做养生SPA的网站建设免费自创网站
  • 舟山网站建设有哪些网站建立分站
  • 【AI论文】大型语言模型(LLM)推理中连接内部概率与自洽性的理论研究
  • 数据结构——堆排序
  • 文档处理控件Aspose.Words教程:Python将Markdown转换为Word
  • 智能体综述:探索基于大型语言模型的智能体:定义、方法与前景
  • 第 16 天:安全、防火墙与系统强化
  • 厦门市建设区网站首页163企业邮箱下载
  • 用手机建立网站做网站植入广告赚钱