GoF23种设计模式之行为型模式之状态模式

设计模式之状态模式(State Pattern) 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。 立即下载
一、概述
        定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
二、适用性
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常有多个操作包含这一相同的条件结构。状态模式将每一个条件分支放入一个独立的类中。使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
三、参与者
1.Context:定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义当前状态。
2.State:定义一个接口以封装与Context的一个特定状态相关的行为。
3.ConcreteStatesubclasses:每一个子类实现一个与Context的一个状态相关的行为。
四、类图

五、示例
Context
package cn.lynn.state;

public class Context {

    private IWeather weather;

    public IWeather getWeather() {
        return weather;
    }

    public void setWeather(IWeather weather) {
        this.weather = weather;
    }
    
    public String getWeatherMsg() {
        return weather.getWeather();
    }
}
State
package cn.lynn.state;

public interface IWeather {

    public String getWeather();

}
ConcreteStatesubclasses
package cn.lynn.state;

public class Sunshine implements IWeather {
    @Override
    public String getWeather() {
        return "晴天";
    }

}
package cn.lynn.state;

public class Rain implements IWeather {

    @Override
    public String getWeather() {
        return "有雨";
    }

}
Client
package cn.lynn.state;

public class Client {

    public static void main(String[] args) {
        Context context1 = new Context();
        context1.setWeather(new Sunshine());
        System.out.println(context1.getWeatherMsg());
        
        Context context2 = new Context();
        context2.setWeather(new Rain());
        System.out.println(context2.getWeatherMsg());
    }

}
Result
晴天
有雨
设计模式之状态模式(State) 状态模式(State) 用意:允许一个对象当状态改变时,改变其行为。 立即下载

相关推荐

DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级

下面这段先引用创龙的说明 IBL 运行后, 将从 NOR FLASH 或 NAND FLASH 的 0x00080000 地址引导 ELF/BBLOB 格式 用户程序。 当引导 ELF 格式用户程序时, IBL 会解析用户程序头部信息,并根据头部信息 拷贝不同的代码段至指定 CPU 内存地址,然后将 PC 指针跳转至_c_int00, 再运行用户程 序。当引导 BBLOB 格式用户程序时,由于无头部信息, IBL 会将用户程序拷贝至 0x9E000000 (该内存地址为 IBL 代码指定),并将 PC..

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 1941

(14)GoF设计模式之状态模式及其实例

定义:允许一个对象在其内部状态发生变化时改变它的行为,对象看起来修改了它的类。属于对象行为型模式。 优点: (1)封装了转换规则。在状态模式中无须使用冗长的条件语句来进行状态的判断和转移,将不同状态之间的转换封装在状态类中,提高了代码的可维护性。 (2)枚举可能的状态,在枚举状态之前需要确定状态种类。 (3)将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需 要改变对象状态即可改变对象的行为, (4)允许状态转换逻辑与状态对象合成一体,而不是一个巨大的条件语句块。 (5)可以让多

雪华杉的博客 583

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 521

GoF总结-18(状态模式)

文章目录1. 概念2. 优点3. 缺点4. 结构与实现4.1 结构4.2 实现 1. 概念 对有状态的对象,把复杂的"判断逻辑"提取到不同的状态对象中,允许状态对象在其内部发生改变时改变其行为。 状态模式是一种对象行为型模式。 2. 优点 结构清晰,状态模式将于特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足"单一职责原则"。 将状态转换显示化,减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。 状态类职责明确,有利于程序的扩展。

星是河的眼的博客 435

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 572

从SPICE到电磁场:非线性器件在CST场路协同仿真中的建模艺术

本文深入探讨了非线性器件在CST场路协同仿真中的建模技术,重点分析了SPICE模型与电磁场仿真的集成方法。通过对比线电流模型和面电流模型的优缺点,结合实际案例展示了二极管阵列在电磁散射调控中的应用,为工程师提供了优化仿真精度与效率的实用技巧。

pandas7gardener的博客 198

Gof23设计模式之状态模式

状态模式就是对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

m0_55993923的博客 712

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题分享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均分布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4042

设计模式GOF23——状态模式

状态模式(state)

buyoufa的博客 1118

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 497

光电二极管探测器电流信号处理与指令输出系统

本文提出了一种基于Python的光电二极管电流信号处理系统设计方案。该系统能够实时采集、处理光电二极管输出的电流信号,并根据预设阈值输出控制指令。系统采用模块化架构,包含数据采集、信号处理、阈值检测、指令生成等核心模块。其中数据采集模块提供了模拟器实现和硬件接口框架,支持噪声模拟和脉冲信号生成。系统设计考虑了实时性、可靠性和可扩展性,适用于光强测量、光电检测等多种应用场景。

huanghm88的专栏 1180

GoF设计模式——状态模式

状态模式(`State Pattern`)是一种**行为型设计模式**,核心思想是**允许一个对象在内部状态改变时改变它的行为,使对象看起来好像修改了它的类型**。

多低调的博客 338

三极管、MOS管和晶体管综合对比——《器件手册--三极管、MOS管和晶体管》

IGBT(Insulated Gate Bipolar Transistor,绝缘栅双极型晶体管)是一种复合全控型电压驱动式功率半导体器件,结合了MOSFET的高输入阻抗、开关速度快的优点和双极型晶体管(BJT)的低导通压降、高电流密度的优点。例如,在NPN型三极管中,当基极电流增加时,集电极电流会按照一定的比例(放大倍数β)增加,这个比例通常在几十到几百之间。在NMOS管中,当栅极相对于源极的电压(Vgs)小于开启电压(Vth)时,漏极和源极之间没有导电沟道,电流无法通过,处于截止状态。

XU157303764的博客 2881

GOF23设计模式-行为型模式8-状态模式(State)

状态模式:当一个对象的内部状态改变时,允许改变其行为,这个对象看起来像是改变了其类。

Tumbler 351

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式(二十一)行为型:状态模式详解

状态模式(State Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于允许一个对象在其内部状态改变时改变其行为,使得对象看起来像是修改了它的类。

谦与谦寻的神隐 697

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

设计模式深度解析:从理论认知到项目实战

本文系统介绍了Java设计模式的应用实践,主要包含以下内容: 设计模式分类体系:详细解析GoF 23种设计模式,分为创建型、结构型、行为型三大类,涵盖单例、工厂、代理、策略等常用模式。 实战应用案例: 订单系统:策略模式处理多种支付方式,状态模式管理订单状态流转 秒杀系统:策略模式变体实现动态限流算法切换 日志系统:观察者模式实现事件通知机制 设计价值: 提高代码复用性和可维护性 遵循开闭原则,便于扩展 解耦系统组件,增强灵活性 进阶思考:强调设计模式是手段而非目的,需结合实际场景合理运用,避免过度设计。

m0_46633338的博客 636

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式-23种设计模式

设计模式-23种设计模式 目录 文章目录前言设计模式简单介绍创建型1. 工厂模式2. 抽象工厂模式3. 单例模式4. 建造者模式建造者模式(Builder Pattern)建造者模式详解设计模式:Builder模式5. 原型模式结构型1. 适配器模式2. 桥接模式3. 过滤器模式4. 组合模式5. 装饰器6. 外观模式7. 享元模式8. 代理模式行为型1. 责任链模式2. 命令模式3. 解释器模式4. 迭代器模式5. 终结者模式6. 备忘录模式7. 观察者模式8. 状态模式9. 空对象模式10. 策略模式1

莫兮的博客 5134

设计模式GOF23之-----------行为型模式(责任链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、模版方法模式、状态模式、观察者模式、备忘录模式)

一 责任链模式        任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链模式的结构   下面使用了一个责任链模式的最简单的实现。   责任链...

金州饿霸吃不饱的博客 871

设计模式 23 种实战辨析:从 3 大分类到 5 个高频面试题解析

本文深入解析设计模式23种的实战应用,从创建型、结构型到行为型三大分类,结合5个高频面试题进行详细剖析。通过代码示例和对比分析,帮助开发者掌握设计模式在软件体系结构中的核心应用,提升代码质量和面试表现。

weixin_33423874的博客 273

23种设计模式介绍

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的解决某一类问题的一种编码方案。在面向对象系统设计中经常可以遇到以下的两类问题:我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。所以就不得不在要用到子类的地方写new 对象。这样实体类的使用者必须知道实际的子类名称,以及会使程序的扩展性和维护变得越来越困难。...

qq_27704713的博客 628

Python 设计模式进阶2026版:23 种设计模式的 Python 实战与本质剖析

《Python设计模式进阶2026版:23种模式的实战剖析》摘要:本文系统讲解GoF 23种设计模式在Python中的高级实现。设计模式分为创建型(5种)、结构型(7种)和行为型(11种)三大类,分别关注对象创建、组合和交互。重点演示了单例模式的4种Python实现(模块级、new、装饰器、元类),工厂方法模式通过注册机制动态创建不同通知类型,以及抽象工厂模式构建跨平台UI组件族。全文采用现代Python特性(类型注解、dataclass、元类等),强调模式本质是解决特定场景问题的经验结晶,而非固定模板。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 287

设计模式/框架源码分析_GOF23 设计模式

设计模式GOF23 • 将设计者的思维融入大家的学习和工作中,更高层次的思考! • 创建型模式: 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 • 结构型模式: 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模 式。 • 行为型模式: 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模 式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。 单例模式 核心作用: – 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 常见应用场景: Win

LiLi的博客 520

Java设计模式:23种设计模式

1.软件设计模式概述 2.GoF 的 23 种设计模式的分类和功能 3.UML中的类图及类图之间的关系 4.开闭原则——面向对象设计原则 5.里氏替换原则——面向对象设计原则 6.依赖倒置原则——面向对象设计原则 7.单一职责原则——面向对象设计原则 8.接口隔离原则——面向对象设计原则 9.迪米特法则——面向对象设计原则 10.合成复用原则——面向对象设计原...

weixin_30522183的博客 167

设计模式速记:先认症状再抓重点,23种模式一句话搞定

设计模式是软件工程中经过反复验证的经典解决方案,面对复杂业务需求时,合理运用设计模式能显著提升代码的可维护性与扩展性。理解设计模式的关键不在于死记硬背23种类图,而在于从代码“症状”中识别适用信号:创建对象绕、类间耦合紧、算法频繁切换,分别对应创建型、结构型与行为型三大分类。例如,单例模式解决全局唯一实例问题,需注意线程安全与双重检查锁;策略模式消除大量if-else,将算法封装为独立策略类;工厂方法则遵循开闭原则,延迟对象创建。掌握这些模式的适用信号与避坑要点,不仅有助于在面试和期末考试中快速作答,也能在

weixin_32821533的博客 250
上一篇: Android应用开发之性能测试之TraceView
下一篇: Android鸳鸯刀之DatePicker、TimePicker之明年今日
innovation
博客等级 码龄14年 251粉丝 136原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值