烟台公司中企动力提供网站建设国外设计教程网站

web/2025/9/27 12:57:11/文章来源:
烟台公司中企动力提供网站建设,国外设计教程网站,网站制作哪家好又便宜,企业网站开发设计前言 我想大家平时都在开发重都遇见过屎山代码#xff0c;这些屎山代码一般都是由于复杂且庞大的if-else造成的#xff0c;状态模式#xff0c;是一种很好的优化屎山代码的设计模式#xff0c;本文将采用两个业务场景的示例来讲解如何使用状态模式拯救屎山代码。 目录 前…前言 我想大家平时都在开发重都遇见过屎山代码这些屎山代码一般都是由于复杂且庞大的if-else造成的状态模式是一种很好的优化屎山代码的设计模式本文将采用两个业务场景的示例来讲解如何使用状态模式拯救屎山代码。 目录 前言 1.网购业务场景 1.1.需求 1.2.if else的实现 1.3.状态模式的实现 2.电梯业务场景 2.1.需求 2.2.if else的实现 2.3.状态模式的实现 1.网购业务场景 1.1.需求 我们来假设一个网购的业务场景需求如下 流程为付款、再发货、在收货流程必须按照以上顺序也就是说发货后不能支付、收货后不能发货和支付 付款后不能重复付款、发货后不能重复发货、收货后不能重复收货 1.2.if else的实现 这里我们设计一个Order订单类用int型的state来表示状态当然也可以用一个枚举类来表示状态会更规范一点这里为了方便而已。 public class Order {//1 未付款//2 已付款//3 未发货//4 已发货//5 未收货//6 已收货private int state; ​public int getState() {return state;} ​public void setState(int state) {this.state state;} } 以收货方法为例业务逻辑实现出来会是 public void receive(Order order){if(order.getState()2){if(order.getState()4){if(order.getState()5){System.out.println(收货成功);}else{System.out.println(已收货无法重复收货);}}else{System.out.println(未发货);}}else{System.out.println(未付款);} } 可以看到一座小屎山代码已经初具规模但凡状态再多一点、业务逻辑再复杂一点这座屎山将会基本不具备可读性。 1.3.状态模式的实现 其实仔细观察可以发现很多时候状态往往是和实体的行为是相关的。之所以引入状态我们是希望实体在不同的状态时呈现出不同的行为。 以上面的场景为例在支付状态下我们希望实体能呈现出支付相关的能力在发货状态下呈现出发货相关的能力在收货状态下呈现出收货相关的能力...... 所以完全可以把状态和能力封装在一起从而省掉外界的if-else判断这就是所谓的状态模式。 状态模式总结起来一句话 实体在不同的状态拥有不同的行为。 作用是 可以省掉大量判断条件带来的if-else逻辑分支使得代码更简洁易读。 接下来我们用状态模式去改写之前的代码。 首先总结一下实体类会有的行为有哪些其实就是付款、发货、收货也就是三个方法为了代码的规范可以抽象出行为接口当然不抽象也可以仁者见仁智者见智。 public interface OrderState{void pay(Order order);void ship(Order order);void receive(Order order); } 接下来总结一下系统里面的状态订单有三个维度的六种状态分别是 付款状态 未付款 已付款 发货状态 未发货 已发货 收货状态 未收货 已收货 于是可以得到有三个状态实体。 将状态和行为绑定可以得到以下三个状态实体。 支付状态实体 public class PayState implements OrderState{public void pay(Order order) {System.out.println(已支付不能再次支付);} ​public void ship(Order order) {order.setOrderState(new ShipState());System.out.println(已发货);} ​public void receive(Order order) {System.out.println(未发货不能收货);} } 发货状态实体 public class ShipState implements OrderState{public void pay(Order order) {System.out.println(已发货禁止重复支付);} ​public void ship(Order order) {System.out.println(已经发货禁止重复支付);} ​public void receive(Order order) {order.setOrderState(new ReceiveState());System.out.println(收货成功);} } 收货状态实体 public class ReceiveState implements OrderState{public void pay(Order order) {System.out.println(已收货不能再次支付);} ​public void ship(Order order) {System.out.println(已收货不能再次发货);} ​public void receive(Order order) {System.out.println(已收货不能再次收货);} } 测试代码 public class Test {public static void main(String[] args) {Order ordernew Order();//初始状态未待支付order.setOrderState(new PayState());order.pay();order.ship();order.receive();} } 测试结果 2.电梯业务场景 2.1.需求 我们考虑一个简单的电梯系统其中有以下状态 停止状态StoppedState 当电梯处于停止状态时它可以接受移动到指定楼层的请求。 上升状态MovingState 当电梯处于上升状态时它不能响应移动请求因为它正在上升。 下降状态MovingState 当电梯处于下降状态时它也不能响应移动请求因为它正在下降。 规则 当电梯处于停止状态时它可以接受移动到指定楼层的请求并切换到移动状态上升或下降。 当电梯处于上升状态或下降状态时它不能接受移动请求而是提示当前正在移动。 电梯在移动过程中不能响应其他移动请求直到它到达指定楼层并切换到停止状态。 在上面的业务情景中我们通过使用状态模式对电梯系统进行了优化。每个状态停止状态和移动状态都对应一个状态类并定义了在该状态下的行为。电梯状态的切换由上下文类ElevatorStateContext来管理它负责在不同状态下执行不同的行为并根据状态的变化进行切换。通过使用状态模式我们将状态切换逻辑封装到不同的状态类中使代码更加模块化和可扩展。 2.2.if else的实现 class ElevatorIfElse {private String state 停止;private int currentFloor 1; ​public void setState(String newState) {state newState;} ​public void moveToFloor(int floor) {if (state.equals(停止)) {System.out.println(电梯从 currentFloor 楼移动到 floor 楼);currentFloor floor;} else if (state.equals(上升)) {System.out.println(电梯正在上升不能移动);} else if (state.equals(下降)) {System.out.println(电梯正在下降不能移动);}} } ​ public class MainIfElse {public static void main(String[] args) {ElevatorIfElse elevator new ElevatorIfElse(); ​elevator.moveToFloor(5);elevator.setState(上升);elevator.moveToFloor(3);elevator.moveToFloor(7);elevator.setState(停止);elevator.moveToFloor(2);} } 2.3.状态模式的实现 interface ElevatorState {void moveToFloor(ElevatorStateContext context, int floor); } ​ class StoppedState implements ElevatorState {Overridepublic void moveToFloor(ElevatorStateContext context, int floor) {System.out.println(电梯从 context.getCurrentFloor() 楼移动到 floor 楼);context.setCurrentFloor(floor);context.setState(new MovingState());} } ​ class MovingState implements ElevatorState {Overridepublic void moveToFloor(ElevatorStateContext context, int floor) {System.out.println(电梯正在移动不能移动);} } ​ class ElevatorStateContext {private ElevatorState state;private int currentFloor 1; ​public ElevatorStateContext() {this.state new StoppedState();} ​public void setState(ElevatorState state) {this.state state;} ​public void moveToFloor(int floor) {state.moveToFloor(this, floor);} ​public int getCurrentFloor() {return currentFloor;} ​public void setCurrentFloor(int currentFloor) {this.currentFloor currentFloor;} } ​ public class MainStatePattern {public static void main(String[] args) {ElevatorStateContext context new ElevatorStateContext(); ​context.moveToFloor(5);context.setState(new MovingState());context.moveToFloor(3);context.moveToFloor(7);context.setState(new StoppedState());context.moveToFloor(2);} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展名 网站微分销平台登陆

在汽车拍摄与旅行摄影领域,天空作为画面中的重要元素,往往决定着整体视觉效果的成败。美摄科技作为业界领先的AI视觉技术提供商,近日推出了全新的AI实时换天解决方案,为用户带来了前所未有的创意空间与效率提升。 传统的换天技术…

北京电商平台网站建设常州营销推广公司

论文阅读其实就是用自己的话讲一遍,然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文:因为它是DMP经典论文,被引多次,学史可以明智,了解最初机理。 论文题目:Learning and Generalization of Moto…

破解wordpress网站密码旅游网站建设规划书模板下载

多好的实战项目大家抓紧时间实操起来呀移动电商实战这次能上岸,最重要的是这个Vue3VantUI.NET6SqlSugar移动电商实战,全部都是最新最热的技术栈,写上简历后面试基本上都是问的这块儿内容。我先给大家看看项目的UI。项目UI全套实战源码这个电商…

主播网站建立广西住房城乡和建设厅网站

一、前言 多比特一般为数据,其在跨时钟域传输的过程中有多种处理方式,比如DMUX,异步FIFO,双口RAM,握手处理。本文介绍通过DMUX的方式传输多比特信号。 二、DMUX同步跨时钟域数据 dmux表示数据分配器,该方…

网站建设图片排版如何开发微信公众平台

这是我面试经常问的一个问题,很多人并不明白其中的区别。 如上图,整体的质量体系架构图相对简单,主要包含三个部分:愿景(高质量交付-快、好)、能力(中间三层不同的能力)和…

工作室 网站 备案公司宣传网站制作

文章目录 OrangePi Kunpeng Pro ——信创再接力1. 绪论1.1 开箱 2. 硬件介绍2.1 硬件配置2.2 硬件清单 3. 网络测试3.1 有线连接3.2 WIFI连接 4.查看系统配置5. 安装常用软件5.1 安装python5.1.1 更换pip源为国内清华源 5.2 安装docker5.3 安装opencv5.4 安装dlib 6.CPU多进程能…

怎么制作个人求职网站seo与网站优化 pdf

PythonAnywhere dev这里.这是一个关于Flask和Web开发的一个很好的问题,而不是我们的系统特定的,所以我会尝试给出一个没有任何特定的通用答案:-)有一些事情我需要知道,给出一个明确的答案你的问题,所以我首先列出我所做的假设 – 如果我错了任何一个,给我一个评论我会适当地更新…

建网站服务器用什么医药公司网站设计

遮挡效果 本段描述摘自 https://developers.google.cn/ar/develop/depth 遮挡是深度API的应用之一。 遮挡(即准确渲染虚拟物体在现实物体后面)对于沉浸式 AR 体验至关重要。 参考下图,假设场景中有一个Andy,用户可能需要放置在包含…

百度快照比网站上线时间早网站公司怎么做运营商

普通代码块 在方法体中定义的代码块。 public static void main(String[] args) {{int i 20;System.out.println(i);}System.out.println(i); // 访问不到变量 i}构造代码块 1.在方法外定义的非静态的代码块 2.先于构造方法执行。实际是先执行父类构造方法,接着…

北京网站制作郑州外贸soho建站多少钱

1.站立会议内容 昨天我们成功的将图片插进去了,在这里,图片是使用的png格式,长知识了。我们今天要继续把界面再优化一下。 照片: 2.任务展板 3.燃尽图 转载于:https://www.cnblogs.com/bk1246788/p/6852935.html

网站的功能和作用网站制作的总结与体会

在Armv7-A首次引入虚拟化时,它仅在非安全状态中添加。在Armv8.3之前,Armv8也是如此,如下图所示: 如前所述在切换安全状态时,EL3用于托管固件和安全监视器。安全EL0/1托管受信任的执行环境(TEE),由受信任的服务和内核组成。 在安全状态下,没有对多个虚拟机的需…

网站数据库是谁提供知名企业营销案例100例

文章目录1. gRPC(google Remote Procedure Call) 技术 —— 高效性地跨平台、跨语言开发2. 基于 python 实现 gRPC 框架2.1 一个 gPRC 项目必须包含的几大部分2.2 helloworld.proto 文件——定义全局可调用函数及其参数数据结构2.3 server.py 文件——实…

惠州市建设交易中心网站赞助网站怎么做

十几岁,对于人类来说,是敏感多虑且叛逆的青春期,而十几岁对于一个企业则意味着扎实经营基础的黄金阶段。谷歌(Google),这个十年来互联网领域最大的赢家,正是这个即将步入金钗之年的“顽童”&…

广州申请公司注册网站asp.net网站登录

抽象 本博客的目的是演示如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。 免责声明 这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。 要求 我使用以下主要技术完成了…

江苏公众科技网站建设怎么在网上宣传自己的公司

文章目录 json模块json与Python数据的相互转化 pyecharts模块pyecharts基本操作基础折线图配置选项全局配置选项 json模块的数据处理折线图示例示例代码 json模块 json实际上是一种数据存储格式,是一种轻量级的数据交互格式,可以把他理解成一个特定格式…

老师众筹网站开发桂林网站搭建

这几天差评君在网上冲浪的时候,无意间挖到了这一张坟图。虽然这已经是五六年前的老梗了,但依旧今人唏嘘不已,毕竟这些年来的技术发展真的是又快又粗暴。让人不由得想像公知们一样阴阳怪气一番:科技啊,请你慢些走&#…

温州建设集团网站高端旅游定制网站

目录 终端认证技术 WEP认证 PSK认证 802.1x认证与MAC认证 Portal认证 数据加密技术 WEP加密 TKIP加密 CCMP加密 TKIP和CCMP生成密钥所需要的密钥信息 802.11安全标准 WEP共享密钥认证、加密工作原理 WEP共享密钥认证 WEP加解密过程 PSK认证以及生成动态密钥的工…

备案增加网站wordpress 设置页面内容具有缓存性

26.编写一个JAVA程序,将文本文件中的内容读取到内存中并打印出来 以下是一个简单的Java程序,用于读取文本文件的内容并将其打印到控制台上: java复制代码 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOExce…

整站关键词快速排名华为手机价格大全

1. 什么是集合框架 集合框架:Java中已经实现好的集合类(一些已经由Java实现好的数据结构)。Java的数据结构和C语言的数据结构是没有什么区别的,里面的区别就只是实现的语言不一样。不可能出现Java的单链表和C语言实现的单链表是两个不同的东…

gta5买房子网站建设python3 做网站

Dio dio是一个强大的Dart Http请求库,提供了丰富的功能和易于使用的API,支持文件上传和下载。 这个就不介绍了,网上有很多的封装案例。 background_downloader 简介 适用于iOS,Android,MacOS,Windows和L…