(本文由言念小文原创,转载请注明出处)

在实际工作中经常遇到某个对象,处于不同的状态有不同行为逻辑、且状态之间可以相互迁移的业务场景,特别是在开发通信协议栈类软件中尤为多见。《设计模式之禅》这本书中对状态模式有着非常详尽的讲解(目前为止我认为讲解得最好的书),但总觉得自己没能够理解透彻、灵活运用。直到今年完成了一个通信协议软件的开发,重新研究了“状态机”,然后回过头来理解当初学习的状态模式,豁然开朗。因此,本文先从状态机开始讲解,然后结合状态机详细阐述状态模式的两种实现方式,最后给出状态模式的优缺点及其使用场景。

一 案例描述

按照老风格,本文先描述一个场景案例,然后围绕案例来展开后文。相信每个人都用过手机的应用商城,通常在应用商城中会将可以安装的app以列表(listview)的形式呈现,一个应用占据列表的一个子项(item),如下图1所示:

图1

我们将注意力聚焦到item的按钮上:

a当检测到可安装的app,按钮显示“安装”;

b点击按钮,软件会去下载app安装包,这时按钮更新视图,显示“正在下载”(即安装进度);

c下载完成后,软件自动安装app,按钮显示“正在安装”;

d安装完成后,按钮显示“打开”,这时点击按钮将打开对应的app。<

java状态机设计模式_Java设计模式之状态模式详解相关推荐

  1. 设计模式——状态模式详解

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  2. 设计模式(四)——原型模式详解

    设计模式(四)--原型模式详解 定义 结构 实现 案例 浅克隆 深克隆 定义 原型模式就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的对象. 结构 原型模式包含以下角色: ...

  3. 设计模式(五)——建造者模式详解

    设计模式(五)--建造者模式详解 概述 结构 代码案例 优缺点 使用场景 模式扩展 创建者模式对比 工厂方法模式和建造者模式 抽象工厂模式和建造者模式 概述 建造者模式就是说将一个复杂对象的构建和表示 ...

  4. (二十一)状态模式详解(DOTA版) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本次LZ给各位介绍状态模式,之前在写设计模式的时候,引入了一些小故事,二十章职责连模式是故事版的最后一篇,之后还剩余四个设计模式,LZ ...

  5. 从java多态到策略模式_设计模式中的多态——策略模式详解

    2. 策略模式详解 2.1 策略模式定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户端而独立的变化. 可以使用多态进行类比来理解策略模 ...

  6. android 状态模式,Android编程设计模式之状态模式详解

    本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...

  7. 设计模式之状态模式详解(State Pattern)

    在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态.当有状态的对象与外部事件产生互动时,其内部 ...

  8. 设计模式之状态模式详解

    1 概述 [例]通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态.每一种状态改变,都有可能要根据其他状态来更新处理.例如,如果电梯门现在处于运行时状态,就不能进行开门操作 ...

  9. 【设计模式】之抽象工厂模式详解与应用(三)

    开心一刻 [问:"怎么样才能给足男人面子"? 神回复:"露出腿上的淤青啊".] 课程介绍 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工 ...

最新文章

  1. NIO中的SelectionKey
  2. hourglass论文_DSSD(1)_论文_arxiv2017
  3. linux 常用命令02--文件属性 以及软硬链接
  4. oracle10g rac升级到10.2.0.5
  5. STL中list的重写
  6. jQuery插件开发代码
  7. 学习笔记——模板方法模式
  8. poidoc转换成html乱码,JAVA 利用POI实现DOC转HTML的方法及BUG修改
  9. Django | ORM choices参数详解
  10. batch文件常用命令
  11. FlashDB数据库+Norflash移植和使用
  12. linux替换bash,bash脚本_输入输出和管道、替换
  13. 纽约理工计算机科学怎么样,纽约大学计算机科学在什么学院?_托普仕留学
  14. 基于STM32的电机--电机概述
  15. 关于眼镜保护的几点做法
  16. 中国云服务市场已达66亿美元:阿里云、百度智能云等市占率位列前四
  17. 华为定制版手机如何解锁及获取ROOT权限
  18. sp工具中最疼的是_阴阳师:sp青行灯会是一个强力打火机吗?简单进行技能猜测...
  19. 欧央行缺乏实质性行动,欧元受挫大幅下滑
  20. 4.3.2 Flink-流处理框架-Flink CDC数据实时数据同步-何为Flink CDC?

热门文章

  1. win10关机后自动重启_win10笔记本在睡眠后会自动重启
  2. Fvid对gio的封装
  3. Delphi web应用开发框架 - 第二部
  4. 前端小知识:ElementPlus引入阿里图标使用(超详细-手把手教学)
  5. 算力驱动未来,AI引领时代
  6. 国网链-赋能可再生能源消纳市场化交易新模式
  7. 计算机术语 抖动,如果计算机屏幕闪烁和抖动,该怎么办
  8. 博科系统怎么在电脑里装服务器,博科SAN存储交换机安装配置文档
  9. 安卓系统新手入门教程
  10. 高等数学(上)(第七版 同济大学) 笔记 :映射