敏捷软件开发 - 原则、模式与实践 —— 设计模式(十二)STATE模式

敏捷软件开发——原则、模式与实践 Robert C.Martin 学习笔记 阅读详情

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第29章

STATE模式

STATE模式既具有switch/case语句的效率又具有解释迁移表的灵活性。

图1
上图展示该模式的结构。Turnstile类拥有关于事件的公有方法以及关于动作的受保护方法。它持有一个指向TurnstileState接口的引用。当Turnstile的两个事件方法中的一个被调用时,它就把这个事件委托给Turnstilestate对象。Turnstilestate的方法实现了LOCKED状态下的相应动作。

TurnstileUnlockedState的方法实现了UNLOCKED状态下的相应动作。为了改变FSM的状态,就要把这两个派生类之一的实例赋值给Turnstile对象中的引用。

STATE模式和STRATEGY模式

STATE模式和STRATEGY模式类似,它们都有一个上下文类,都委托给一个具有几个派生类的多态基类。不同之处(见下图)在于,在STATE模式中,派生类持有回指向上下文的引用。派生类的主要功能是使用这个引用选择并调用上下文类中的方法。在STRATEGY模式中,不存在这样的限制以及意图。STRATEGY的派生类不必持有指向上下文类的引用,并且也不需要去调用上下文类的方法。所以,所有的STATE模式实例同样也是STRATEGY模式实例,但是并非所有的STRATEGY模式实例都是STATE模式实例。

图2

STATE模式的代价和收益

STATE模式彻底地分离了状态机的逻辑和动作。动作是在Context类中实现的,而逻辑则是分布在State类的派生类中。这就使得二者可以非常容易地独立变化、互不影响。例如,只要使用State类的另一个派生类,就可以非常容易地在一个不同的状态逻辑中重用Context类的动作。此外,我们也可以在不影响State派生类逻辑的情况下创建Context子类来更改或者替换动作实现。

该方法的另外一个好处就是它非常高效。它基本上和嵌套switch/case实现的效率完全一样。因此,该方法既具有表驱动方法的灵活性,又具有嵌套swtich/case方法的效率。

这项技术的代价体现在两个方面。第一,State派生类的编写完全是一项乏味的工作。编写一个具有20个状态的状态机会使人精神麻木。第二,逻辑分散。无法在一个地方就看到整个状态机逻辑。因此,这使得代码难以维护。这会使人想起嵌套switch/case方法的晦涩性。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(一) 本文对应原书第1章和第2章。 敏捷软件开发宣言 个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱到的文档 客户合作 胜过 合同谈判 响应变化 胜过 遵循规则 敏捷开发原则 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势 经常性的交付可以工作的软件,交付的间隔可以从几周到几个月... 阅读详情

相关推荐

敏捷软件开发:原则、模式与实践实战

本文还有配套的精品资源,点击获取 简介:敏捷软件开发是一种以人为本、迭代、逐步交付的开发方式,强调适应变化和持续改进。本课程设计项目经过测试,旨在帮助学生掌握敏捷开发的原则、模式和实践。学生将通过实践任务,提升在Scrum、极限编程、精益开发等敏捷模式方面的能力,并在迭代开发、用户故事、持续集成等实践中,提升团队协作和软件质量。 1. 敏捷软件开发简介 敏捷软件...

weixin_36288992的博客 1536

敏捷软件开发 - 原则、模式与实践

起源 《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。 可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...

feifeilb的博客 2377

敏捷软件开发:原则、模式与实践详解

Scrum是一种迭代式增量的敏捷软件开发框架,其核心概念包括角色、事件和工件三大组成部分。角色包括产品负责人(Product Owner)、Scrum Master和开发团队(Development Team)三个关键角色。产品负责人负责维护产品待办事项列表(Product Backlog),优先级排序,确保团队的工作和产品目标保持一致。Scrum Master是团队的教练和辅助者,负责移除阻碍团队进展的障碍,确保Scrum过程的顺利执行。开发团队则是自组织和跨功能的,负责实际的开发工作。

weixin_42128315的博客 1571

敏捷软件开发:原则、模式和实践

1,敏捷宣言和原则 1.1 敏捷宣言 敏捷联盟在敏捷大会上发布了他们最主要的主张,称之为敏捷宣言。其主要表述如下: 1,个人和交互胜过过程与工具 2,可以工作的软件胜过面面俱到的文档 3,客户合作胜过合同谈判 4,响应变化胜过遵循计划 虽然后者在软件开发中也具有其价值,但敏捷联盟认为,前者比后者更具有价值。这四点构成了敏捷最核心的要素,但我个人认为就这4点而言,最根本的还是“个人和交

Roy的IT笔记 3853

设计模式经典书 敏捷软件开发

敏捷软件开发 原则模式及实践 非常好的书。

敏捷软件开发-原则、模式与实践.pdf

本书讲授了一些原则、模式以及实践,它们可以帮助软件开发人员在追求美的程序、设计以及团队的道路上迈出第一步。本书探索了基本的设计原则,软件设计结构的通用模式以及有利于团队融为一个有机整体的一系列实践。本书包含了许多代码,仔细研读这些代码是学习本书所教授的原则、模式及时间的最有效方法

《敏捷软件开发(原则、模式与实践)》前三章笔记

 《敏捷软件开发(原则、模式与实践)》(美)Robert C.Martin 著        邓辉 译        孟岩 审笔记笔记摘录:Eleven第一部分 敏捷开发第1章 敏捷实践        教堂尖顶上的风标,即使由钢铁制成,如果不懂得顺应风势的艺术,一样会被暴风立即摧毁。                                                ——海因里希.海涅(

Eleven's Blog 1875

敏捷软件开发原则,模式与实践(中文)

敏捷软件开发原则,模式与实践<br>在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。 <br>·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。 <br>·使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程。 <br>·包含了极具价值的可多次使用的C++和JAVA源代码 <br>·重点讲述了如何使用UML和设计模式解决面向客户系统的问题 <br>

推荐:《敏捷软件开发、原则、模式与实践》电子版

 内容简介 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。   ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。   ·使用真实案例讲解如何用极限编程来设计、测试、重构和结

Scrum中文网-博客 1318

敏捷软件开发原则、模式与实践.pdf

敏捷开发的经典书 内容简介 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。   ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。   ·使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程。   ·包含了极具价值的可多次使用的C++和JAVA源代码   ·重点讲述了如何使用UML和设计模式解决面向客户系统的问题

海豚调度器(dolphinscheduler)再次使用,添加钉钉预警

1,首先我们部署是海豚调度器 1.3.8版本,由于页面只有邮件预警,所以在了解源码的同时,需要添加钉钉预警 2,说明,这一块是同事搞的,不是我搞的,新版本的dolphinscheduler已经有了钉钉模块,只是新版本还没有发布 3,我们现在只是添加简单的钉钉预警,任务成功或者失败会发送邮件+钉钉 4,具体操作 找到最新的源码devhttps://github1s.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-alert/src/ma...

qq_31866793的博客 3083

推荐书籍系列(2):敏捷软件开发――原则、模式与实践

又名: Agile Software Development: Principles, Patterns, and Practices 译者: 邓辉作者: (美)Robert C·Martin 邓辉 孟岩 审 isbn: 7302071977页数: 500出版社: 清华大学出版社出版年: 2003-9-1 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您...

weixin_30267785的博客 145

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5858

笔记-敏捷软件开发:原则、模式与实践

七年等待换来的经典 本书审校:孟岩  Robert C. Martin的经典著作Agile Software Development中文版面世,这是计算机技术出版领域的一件大喜事。即使在今天技术图书市场非常繁荣的局面下,这本书的问世也仍然是值得广大开发者格外留意和关注的事件。这不仅是因为它刚刚荣获2002年度Jolt震撼大奖,更因为这本书本身的价值和独特魅力。 面向对象设...

weixin_34268169的博客 424

VScode搭建Opencv(C++开发环境)

VScode配置Opencv一、准备软件二 、下载软件1、MinGw下载2、 Cmake下载3、Opencv下载三、编译1、cmake-gui2、make3、install四、 VScode配置1、launch.json2、c_cpp_properties.json3、tasks.json五、测试 用了半天事件,看了各种的博客终于配置成功了,在这里记录并分享一下,让更多的人少走弯路。 本次环境是Win 10. 一、准备软件 我们本次用到的3个软件,(建议读者文件路径,文件版本 尽量都和我相同,这样不容易出错

河旬的博客 8万+

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由下keep-alive缓存失效的根本原因,并提供了三种实战解决方案:通过路由扁平化根治问题、利用状态管理精细模拟缓存效果,以及借助keep-alive-vue3插件快速修复。文章旨在帮助开发者彻底理解Vue Router与keep-alive的协作机制,从而根据项目情况选择最佳策略,有效解决页面状态丢失的难题。

weixin_29015801的博客 285

《敏捷软件开发》— 设计模式(一)

《敏捷软件开发》— 设计模式(一)一、Command 模式和 Active Object 模式1、Command 模式2、Active Object 模式 一、Command 模式和 Active Object 模式 1、Command 模式 我们在 《设计模式》— 行为型模式 — 命令模式中学习过命令模式。该模式可以将负责实现业务逻辑的模块与上层模块分离。 2、Active Object 模式 Active Object 模式是命令模式在多线程控制的具体应用。 ...

coding-hwz 654

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6373

敏捷软件开发(原则,模式与实践)笔记1

教堂尖顶上的风标,即使由钢铁制成,如果不懂得顺应风势的艺术,一样会被风暴立即摧毁。——海因里希.海涅一、敏捷软件开发宣言1、个体和交互胜过过程和工具人是获得成功的最为重要的因素。合作、沟通以及交互能力要比单纯的编程能力更为重要。一个由平均水平程序员组成的团队,如果具有良好的沟通能力,将比那些虽然拥有一批高水平程序员,但是成员却不能进行交流的团队更有可能获得成功。选择合适的工具而

方明的专栏 3319

Arcgis 10.3 与 ArcGIS Engine 10.3 安装与破解

Arcgis 10.3 与 ArcGIS Engine 10.3 安装与破解

weixin_52127098的博客 4725

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。

zhusl6688的博客 376

软件开发模式之敏捷开发(Scrum)

简介 这几年关于敏捷开发在互联网企业中越来越广泛被使用到,运用的比较多的当属scrum敏捷开发和xp敏捷开发,人人都在谈论敏捷开发。那什么才是敏捷开发呢?目录 什么是敏捷开发? 传统的开发模式和敏捷开发模式的对比? 敏捷开发scrum的实施。 什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,

Debug yourself! 5522

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 133

敏捷开发设计模式的五大原则(读敏捷软件开发:原则、模式与实践笔记记录一下)...

最近在公司架构师一次公开课上,大牛推荐了这本书,公司领导开会也推荐这本书,于是拜读了,这里记一下印象比较深刻的五大原则! 一 敏捷联盟与原则 在2001年召开的研讨软件过程未来发展趋势的一次会议上,17位业界专家就什么是“敏捷”达成一致意见。这次会议的一个成果是成立了“敏捷联盟”并发布了联盟敏捷宣言(参考http://www.agilealliance.org/principle...

weixin_33849942的博客 325

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

敏捷软件开发设计模式之他

Active Object 什么是Active Object Active Object模式是一种异步编程模式。它通过对方法的调用(Method Invocation)与方法的执行(Method Execution)进行解耦(Decoupling)来提高并发性。若以任务的概念来说,Active Object模式的核心则是它允许任务的提交(相当于对异步方法的调用)和任务的执行(相当于异步方法的真正执行)分离。 具体这里讲的很详细了,我就不重复了,可以参考。http://ifeve.com/java-ac

kimichen123的专栏 285

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十一)VISITOR模式
下一篇: 浏览器同源策略
feifeilb
博客等级 码龄22年 22粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值