行为模式8.状态模式------灯泡状态切换
行为型模式
- 模板方法模式(Template Method Pattern)
- 命令模式(Command Pattern)
- 迭代器模式(Iterator Pattern)
- 观察者模式(Observer Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 解释器模式(Interpreter Pattern)
- 状态模式(State Pattern)
- 策略模式(Strategy Pattern)
- 职责链模式(Chain of Responsibility Pattern)
- 访问者模式(Visitor Pattern)
当涉及状态模式时,它主要用于在对象的状态改变时改变其行为。状态模式允许对象在内部状态改变时改变它的行为,看起来好像是改变了它的类。
以下是状态模式的基本结构和示例:
结构
- Context(上下文):定义客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象。
- State(状态):定义一个接口以封装与Context的一个特定状态相关的行为。
- ConcreteState(具体状态):每一个具体状态类实现了与Context的一个状态相关的行为。
示例
让我们以一个简单的灯光控制器为例来说明状态模式。
// State 接口
interface State { void doAction(Context context);
} // ConcreteState 实现
class OnState implements State { public void doAction(Context context) { System.out.println("Light is turned on"); context.setState(this); }
} class OffState implements State { public void doAction(Context context) { System.out.println("Light is turned off"); context.setState(this); }
} // Context 类
class Context { private State state; public Context() { state = null; } public void setState(State state) { this.state = state; } public State getState() { return state; }
} // 使用示例
public class StatePatternExample { public static void main(String[] args) { Context context = new Context(); State onState = new OnState(); onState.doAction(context); State offState = new OffState(); offState.doAction(context); }
}
在这个示例中,`Context` 表示灯光控制器,`State` 是一个接口,定义了状态改变时的行为。`OnState` 和 `OffState` 分别表示开和关的状态,它们实现了 `State` 接口来定义状态改变时的行为。在 `StatePatternExample` 中,我们创建了一个 `Context` 实例,并演示了状态从开到关的转变。
这就是状态模式的基本结构和一个简单示例。状态模式有助于在对象的状态变化时封装对象的行为,并使得状态转换更加清晰和易于维护。
状态模式和策略模式在某种程度上有一些相似之处,因为它们都涉及到在运行时改变对象的行为。
相似之处
- 封装算法/行为:两者都涉及将算法或行为封装到独立的类中,以便在运行时进行切换。
- 解耦:状态模式和策略模式都有助于将特定的行为与上下文对象解耦,使得它们可以独立地变化和复用。
不同之处
- 关注点:状态模式关注对象在不同状态下的行为变化,而策略模式关注在不同策略(算法)下的行为变化。
- 触发方式:状态模式的行为转换通常是由对象内部的状态改变触发的,而策略模式的行为转换通常是由客户端显式调用触发的。
总结
虽然这两种模式有相似之处,但它们的关注点和使用场景不同。状态模式适用于对象状态改变时的行为变化,而策略模式适用于根据不同的需求选择不同的算法或策略。理解它们之间的区别有助于选择适当的模式来解决特定的设计问题。
相关文章:
行为模式8.状态模式------灯泡状态切换
行为型模式 模板方法模式(Template Method Pattern)命令模式(Command Pattern)迭代器模式(Iterator Pattern)观察者模式(Observer Pattern)中介者模式(Mediator Pattern…...
Linux账户和组管理——账户和工作组分类,用户账号文件,/etc/passwd文件中7个字段,id 命令
## 账户和工作组的分类 ### 用户分为三类: - 超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。 - 系统账户——是Linux系统正常…...
《大明混一图》: 令人叹为观止的古代世界地图
关注我们 - 数字罗塞塔计划 - 《大明混一图》是我国目前保存尺寸最大、最完整、年代最久远,且由中国人自己绘制的世界地图,2003年10月被列入《中国档案文献遗产名录》,现保存于中国第一历史档案馆。据学者们研究,这幅地图大约是…...
Java高级重点知识点-22-缓冲流、转换流、序列化流、打印流
文章目录 缓冲流字节缓冲流字符缓冲流 转换流InputStreamReader类OutputStreamWriter类 序列化ObjectOutputStream类ObjectInputStream类 打印流 缓冲流 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流 基本原理: 缓冲流的…...
express民族民俗文化分享平台-计算机毕业设计源码22552
基于Vue的民族民俗文化分享平台设计与实现 摘 要 本文介绍了一种基于Vue.js前端框架和Express后端框架的民族民俗文化分享平台的设计和实现。该平台旨在通过线上方式,促进民族民俗文化的传播与分享,增强公众对多元文化的了解和认同。 平台为普通用户提供…...
Web 基础与HTTP 协议
域名的概述 (1 )域名的结构 (2 )域名结构类型 根域:指的是根服务器,要用来管理互联网的主目录,全世界只有13台。1个为 主根服务器,放置在美国。其余12 个均为辅根服务器,其中9个放置在美国;欧 洲2个&…...
C++超市外卖小程序-计算机毕业设计源码62482
摘要 随着社会生活节奏加快和消费习惯的变化,外卖服务成为人们日常生活中不可或缺的一部分。超市外卖作为新兴业态备受关注,然而传统外卖平台在推荐精准度和用户体验方面存在挑战。 本研究旨在基于协同过滤算法,结合C语言和MySQL数据库&#…...
合合信息“大模型加速器”亮相2024世界人工智能大会
文章目录 📑引言一、大模型发展的挑战数据稀缺问题 二、大模型“加速器”解决方案概述文档解析引擎的特征 三、文档解析引擎的优势3.1 高速处理能力3.2 智能理解文档结构3.3 多种数据类型支持3.4 高精度数据提取3.5 应用广泛,适应性强 四、复杂图表解析4…...
2024.07.03校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、提前批 | 中国兵器工业集团第二〇二研究所 | 提前批/招/聘暨/暑期/开放日 提前批 | 中国兵器工业集团第二〇二研究所 | 提前批招聘暨暑期开放日 2、夏令营 | 2024年南网数字集团“未来…...
MySQL中的DDL语句
第一题 输入密码登录mysql,创建数据库zoo,转换到zoo数据库, mysql> create database zoo character set gbk; mysql> use zoo查看创建数据库zoo信息 mysql> show create database zoo;删除数据库zoo mysql> drop database zo…...
ENSP-防火墙小实验
实验总要求 我的拓扑图: 具体配置 1.交换机 vlan: # sysname Lswl # vlan batch 2 to 3 # 接口: [LSWl]int e 0/0/2 [LSWl-Ethernet0/0/2ldisplay this # interface Ethernet0/0/2port link-type accessport default vlan 2 # return [LsWl-Ethernet0…...
PHP微信小程序视频图文流量主变现小程序系统源码
💰微信小程序新机遇!视频图文流量主变现秘籍🔑 🚀【流量变现新风口】🚀 还在为微信小程序的庞大流量如何转化为真金白银而苦恼吗?今天,就带你揭秘“微信小程序视频图文流量主变现小程序”的神…...
PHP智慧社区小区物业管理系统小程序源码
让生活更便捷,社区更和谐✨ 🏡【开篇:智慧生活,从社区开始】🏡 在快节奏的现代生活中,寻找一份便捷与舒适成为了我们共同的追求。小区,作为我们日常生活的温馨港湾,其管理水平和服…...
手撸俄罗斯方块(五)——游戏主题
手撸俄罗斯方块(五)——游戏主题 当确定游戏载体(如控制台)后,界面将呈现出来。但是游戏的背景色、方块的颜色、方框颜色都应该支持扩展。 当前游戏也是如此,引入了 Theme 的概念,支持主题的扩…...
【测试开发】--安全渗透测试
1. 安全渗透 1.1 分类 web数据库安全web应用服务器安全(文件上传漏洞、文件包含漏洞)web客户端安全(XSS跨站攻击) 2. sql注入 2.1 sql注入介绍 sql注入在安全问题中排行榜首sql注入攻击是输入参数未经过滤,然后直…...
AMEYA360:类比半导体三款车规级新品介绍
类比半导体三款全新车规级智能驱动芯片——HD70504与HD70804四通道高边驱动、HD7004低导通电阻高边驱动以及DR8112直驱马达驱动芯片介绍,进一步扩展了其汽车智能驱动产品的深度与广度。 新品首发,诠释“芯”动未来 HD70504 & HD70804四通道高边驱动芯…...
内衣洗衣机哪个牌子好用?五大硬核宝藏内衣洗衣机推荐
在日常生活中,内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机,不仅可以减少洗衣负担,还能提供高效的洗涤效果。然而,市场上众多内衣洗衣机品牌琳琅满目,让我们往往难以选择。那么&a…...
红酒与未来科技:传统与创新的碰撞
在岁月的长河中,红酒以其深邃的色泽、丰富的口感和不同的文化魅力,成为人类文明中的一颗璀璨明珠。而未来科技,则以其迅猛的发展速度和无限的可能性,领着人类走向一个崭新的时代。当红酒与未来科技相遇,一场传统与创新…...
php快速入门
前言 php是一门脚本语言,可以访问服务器,对数据库增删查改(后台/后端语言) 后台语言:php,java,c,c,python等等 注意:php是操作服务器,不能直接在…...
【排序 - 归并排序】
归并排序(Merge Sort)是一种高效的排序算法,基于分治(Divide and Conquer)策略。它将待排序数组分成两个较小的子数组,分别对它们进行排序,然后将排好序的子数组合并成一个整体有序的数组。归并…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
