重构实例-消息发送-使用策略进行重构-枚举方式-7

Java枚举深度解析:从常量列表到状态机与策略模式的实战应用 在Java编程中,枚举(Enum)是一种特殊的类,它通过限制实例数量来提供类型安全和单例特性。其核心原理在于每个枚举类型都隐式继承自java.lang.Enum,每个枚举常量都是该类的唯一实例,并可通过编译器生成的values()方法获取所有实例的有序数组。这种设计赋予了枚举强大的技术价值,使其不仅是简单的常量集合,更能作为线程安全的、不可变的值对象,在构建清晰、健壮的领域模型中发挥关键作用。在实际应用场景中,枚举常被用于实现状态机来管理对象的状态流转,或结合策略模式为不同枚举值封装特定行为。本文聚焦于Ja 阅读详情

7. 重构实例-消息发送-使用策略进行重构-枚举方式

由于这是一个长文,分成了好几章来介绍如何重构。

  1. 原始代码及准备
  2. 职责独立
  3. 去除static关键字
  4. 接口添加转换方法
  5. 方法合并
  6. 使用策略进行重构-Map方式
  7. 使用策略进行重构-枚举方式

经过上一次的重构我想你基本理解了使用map的策略模式,我们再来看使用策略模式的另一种实现list

7.1 重构步骤

这个还是规矩

  1. 检查单元测试。
  2. 使用枚举将类型与实例相绑定。
  3. 进行策略的实现。
  4. 执行单元测试。

7.2 检查单元测试

这个单元测试没有变化,可跳过

7.3 使用枚举将类型与实例相绑定。

public enum MsgSenderInstanceEnum {
  /** 短信 */
  SMS(MessageTypeEnum.SMS.getMsgType(), new SmsSender()),

  /** email */
  EMAIL(MessageTypeEnum.EMAIL.getMsgType(), new EmailSender()),

  /** dingding */
  DINGDING(MessageTypeEnum.DINGDING.getMsgType(), new DingDingSender()),

  /** 微信 */
  WECHAT(MessageTypeEnum.WECHAT.getMsgType(), new WeChatSender()),

  /** 工作微信 */
  WORKWECHAT(MessageTypeEnum.WORKWECHAT.getMsgType(), new WorkWeChatSender());

  private String msgType;

  private MessageSenderInf msSender;

  MsgSenderInstanceEnum(String msgType, MessageSenderInf msSender) {
    this.msgType = msgType;
    this.msSender = msSender;
  }

  public String getMsgType() {
    return msgType;
  }

  public MessageSenderInf getMsSender() {
    return msSender;
  }

  /**
   * 按类型获取实例
   *
   * @param type 类型信息
   * @return 实例信息
   */
  public static MessageSenderInf getInstanceByType(String type) {
    for (MsgSenderInstanceEnum senderItem : values()) {
      if (senderItem.getMsgType().equals(type)) {
        return senderItem.getMsSender();
      }
    }
    return null;
  }
}

7.4 策略的实现。

public class MessageSender {

  /**
   * 进行策略消息的发送
   *
   * @param msgType 消息类型
   * @param notify 消息信息
   */
  public void sendMessage(String msgType, MessageData notify) {
    MessageSenderInf msgInstance = MsgSenderInstanceEnum.getInstanceByType(msgType);
    if (null == msgInstance) {
      return;
    }
    msgInstance.sender(msgInstance.parse(notify));
  }
}

7.5 单元测试的验证

经过此之后,使用枚举的方式来进行按类型执行的方案已经完成。

Java枚举深度解析:从类型安全到高级应用实战 在Java编程中,类型安全是保证代码健壮性的核心概念之一。传统使用int常量表示固定选项的方式,虽然简单,但存在类型不安全、可读性差、难以维护等痛点。Java枚举(Enum)作为一种特殊的类,通过编译器层面的支持,实现了类型安全的常量集合,其底层继承自java.lang.Enum,确保了实例的有限性和可控性。这一特性不仅消除了无效参数传入的风险,还使得代码意图更加清晰,极大地提升了工程实践中的可维护性。枚举的技术价值远不止于此,它通过携带字段、实现抽象方法和接口,能够优雅地实现策略模式、状态机等设计模式,并 阅读详情

相关推荐

Java枚举深度解析:从类型安全到高级应用实践

在Java编程中,类型安全是保证代码健壮性的重要基础。枚举作为一种特殊的类,通过限定变量的取值范围,从根本上解决了传统常量定义中存在的类型不安全问题。其原理在于编译后继承java.lang.Enum,每个枚举常量都是该类的单例实例,确保了唯一性和线程安全性。这一特性不仅提升了代码的可读性和可维护性,还使得枚举能够与集合框架高效协作,例如通过EnumSet和EnumMap实现高性能的数据存储与访问。在实际应用场景中,枚举常被用于状态管理、策略模式实现以及配置项定义,特别是在领域驱动设计中作为值对象的理想载体。

weixin_30325487的博客 395

聊聊cheddar的MessageSender

序 本文主要研究一下cheddar的MessageSender MessageSender Cheddar/cheddar/cheddar-messaging/src/main/java/com/clicktravel/cheddar/infrastructure/messaging/MessageSender.java public interface MessageSender<T extends Message> { /** * Send a message

go4it 216

AI驱动的SaaS开发栈四层重构:意图、策略、执行与契约

在AI深度融入软件工程的当下,传统SaaS开发栈正经历从单体耦合到意图驱动的范式跃迁。其核心在于将模糊需求转化为可计算的结构化意图,再经策略动态编排、执行确定性操作、契约强制约束,形成闭环治理能力。这一过程并非替代开发者,而是通过原子化分层(意图层、策略层、执行层、契约层)实现责任解耦与认知卸载,显著提升安全合规性、可观测性与迭代效率。尤其在跨境SaaS、医疗、金融等强监管场景中,该架构已验证其对GDPR、HIPAA、PCI-DSS等合规要求的内生支持能力,并天然适配LLM工具链(如LlamaIndex语义

tomfish 512

重构实例-消息发送-使用策略进行重构-Map方式-6

6 重构实例-消息发送-使用策略进行重构-Map方式 由于这是一个长文,分成了好几章来介绍如何重构。 原始代码及准备 职责独立 去除static关键字 接口添加转换方法 方法合并 使用策略进行重构-Map方式 使用策略进行重构-枚举方式 6.1 问题分析 经过前两轮的重构之后,已经提取了抽象接口,并将其static去掉。还为消息发送接口添加了转换方法,并对代码进行了方法的合并操作。 经过这几轮的修改,代码已经看起来整洁、清晰了许多。但是还存在一个问题,那就是每当要添加一个新的渠道的时候,就得改动Mess

bug_null的博客 221

用 Cursor 做安全可控的代码重构:方法论与工程实践

代码重构是提升软件可维护性的核心工程活动,其本质是在不改变外部行为的前提下优化内部结构。传统重构依赖开发者经验与手动操作,风险高、耗时长;而以 Cursor 为代表的智能编码助手,通过大语言模型实现自动化结构改造,显著提升效率。关键在于理解重构的契约性——输入输出不变是底线,AST 级别变更可控是保障,测试先行与分层提交是落地基础。本文聚焦 Node.js/TypeScript 微服务场景,详解如何结合 Cursor 原生能力与本地语义校验,将重构转化为可预测、可验证、可回滚的标准化流程,并覆盖指令工程、人

babing2770的博客 489

MassTransit 与 RabbitMQ 生产级消息治理实践

消息队列是微服务架构中实现异步解耦与最终一致性的核心基础设施。其底层原理涉及连接管理、消息确认、重试机制与死信路由等关键环节,技术价值在于保障高并发场景下的可靠性、可观测性与可运维性。典型应用场景包括订单状态同步、库存扣减、风控事件分发等需要强幂等性与事务一致性的业务流。然而,裸写 RabbitMQ Client 容易陷入连接未恢复、序列化不兼容、重试逻辑阻塞、死信归档缺失等隐性技术债;而 MassTransit 通过 Endpoint、Message、Consumer、Bus 四层抽象,将消息通信升维为可

天下无双 526

使用反射+策略模式代替项目中大量的switch case判断

我这里的业务场景是根据消息类型将离线消息存入mongoDB不同的collection中。其中就涉及到大量的分支判断,为了增强代码的可读性和可维护性,对之前的代码进行了重构。 先对比一下使用反射+策略模式前后的代码: 重构前: 重构后: 我们可以看到重构前的代码充斥着大量的分支判断,以后每增加一个新的消息类型就要增加一个新的具体实现类和增加一个新的分支判断,可拓展性是相当差的;而...

weixin_34417183的博客 256

Notion AI高ROI工作流:7个经2000万人验证的生产力重构实践

Notion AI并非通用大模型接口,而是一种嵌入式智能协作系统,其核心价值在于依托数据库结构实现环境感知与业务语义理解。区别于ChatGPT等无状态工具,它通过上下文粘性、Schema驱动提示和跨视图自动回填,将AI从‘内容生成器’升级为‘流程参与者’。这种能力显著降低信息捕获失真率、压缩结构化输出耗时、消除跨系统人工对齐成本——实测在会议纪要、客户反馈归因、周报推演等刚性场景中,稳定带来人均7+小时/周的有效时间增益。本文聚焦真实组织落地逻辑,解析如何基于数据库即API、动态骨架、语义翻译器等设计范式,

weixin_30378623的博客 368

【全球首批C++27静态反射商用项目解密】:西门子PLC配置引擎重构实测——编译时间+12%,运行时内存下降93.7%

西门子PLC配置引擎率先落地C++27静态反射工业应用案例,通过编译期元编程替代运行时RTTI与字符串映射,实现工业控制配置解析零动态内存分配。实测编译时间仅增12%,运行时内存下降93.7%,显著提升嵌入式实时性与安全性。值得收藏

BreakNexus的博客 397

重构前置设计评审:用Claude Plan Mode实现可验证的代码手术

重构本质上是系统级协作工程,而非单纯编码行为。其核心挑战在于意图模糊、影响盲区与验证脱节——这三大断点导致超70%的重构项目延期或返工。基于结构化设计评审(Design Review-First)的方法论,通过AI驱动的重构计划书(Code Plan Mode),将变更契约、跨服务依赖图谱、可观测性门禁(如P99延迟、错误率)和一键回滚预案固化为可执行协议,显著提升高危路径(如支付、登录)重构的可靠性与团队共识效率。本文详解该模式在电商订单库存解耦等真实场景中的闭环落地实践。

weixin_34253126的博客 322

Unity C# 枚举遍历性能优化:从 Enum.GetValues 到预定义数组的实战对比

在 C# 编程中,枚举(Enum)是一种用于定义命名常量的值类型,它通过提供类型安全性和清晰的语义来组织代码。其底层原理是基于整数的存储,但在需要获取所有枚举值进行遍历时,常用的 `Enum.GetValues` 方法会通过反射机制动态查询元数据并分配新数组,这带来了运行时开销。从技术价值看,消除不必要的反射和内存分配是提升应用性能、减少垃圾回收(GC)压力的关键,尤其在游戏开发等对帧率敏感的场景中。在 Unity 开发的应用场景下,诸如状态机更新、网络消息处理或编辑器工具生成等高频操作中,低效的枚举遍历可

weixin_30383279的博客 323

【SpringBoot 4.x 第188节】消息可靠性设计:幂等、重试、补偿与事务消息实战!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 75

AI编程增效实战:开发者工作流三层重构与提示词工程

AI编程不是替代程序员,而是重构‘写代码’为‘指挥代码生成器’的工作流。其核心在于理解代码生成的统计本质与工程约束之间的张力——大模型基于海量代码学习模式概率,但真实开发需满足业务语义、安全合规与性能SLA等硬性条件。因此,高效落地依赖三层能力协同:L1智能补全解决‘怎么写’,L2意图理解解决‘写什么’,L3系统洞察解决‘为什么这么写’。关键突破点在于提示词工程的可量化设计(角色定义、约束显性化、格式确定性、上下文锚点),以及本地RAG与公有模型的混合部署策略,从而在保障数据主权前提下实现私有代码库的语义级

weixin_30790841的博客 392

重构分布式集成代码:从混乱Harness到清晰适配器设计

在微服务与云原生架构中,服务间集成是核心环节,但常因设计不当导致代码臃肿、难以维护。集成代码(或称连接器)负责处理远程调用、序列化、错误处理等跨边界通信,其设计质量直接影响系统可维护性与弹性。遵循单一职责与接口隔离原则,通过依赖倒置将业务意图与技术实现分离,是构建健壮集成层的关键。采用适配器模式、专业化基础设施组件及声明式弹性机制(如熔断与重试),能有效解决代码重复、测试困难、监控缺失等工程痛点。本文以短信服务集成为例,剖析典型坏味道Harness设计,并提供基于Spring Boot的实战重构指南,帮助开

492

SDD规范驱动开发:用OpenSpec YAML重构全栈协作流程

规范驱动开发(SDD)是一种以机器可读需求规范为核心的新一代软件工程范式,其原理在于将模糊的业务意图转化为结构化、可验证的契约文档(如OpenSpec YAML),从而统一前后端、测试与DBA对需求的理解。技术价值体现在消除语义衰减、自动生成类型定义、API骨架、测试用例及校验逻辑,显著降低胶水代码占比。典型应用场景包括RESTful接口设计、跨角色协作建模、Vue/React组件契约封装及BDD/TDD用例派生。本文聚焦OpenSpec标准实践,结合TypeScript全栈生成与Linux环境落地细节,揭

461

从常量堆到可演进的枚举:在 ABAP 里落地 Collection Pattern 的正确姿势

摘要:ABAP开发中的常量管理最佳实践 本文探讨了SAP项目中常量管理的重要性与优化方法。传统方案(如接口常量分组)虽提高了可读性,但存在类型安全弱、约束不足等问题。建议采用现代ABAP枚举类型(7.51+)将固定值集合纳入类型系统,实现强约束。对于遗留系统,可通过工程化手段(领域对象归属、静态检查等)管理常量。特别在RAP和Gateway场景中,枚举化能确保跨层一致性,避免前端体验问题。文章还提出了结合AI工具进行半自动重构的方案,将治理重点从代码扫描转向语义评审。最终目标是建立可演进、强约束的常量管理体

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4045

AI写代码时代,软件团队如何重构交付能力

AI编程不是替代程序员,而是重新定义‘交付价值’的技术范式。其底层原理在于将业务需求转化为AI可理解的结构化上下文,通过Prompt工程、可审计生成与多层校验机制,实现从需求到生产代码的闭环。技术价值体现在大幅提升CRUD类任务效率、降低胶水代码维护成本、加速遗留系统现代化;典型应用场景包括微服务模块生成、规则引擎编译、API对接脚本开发及测试桩自动化。当团队聚焦于‘定义可生成性’而非‘手写代码量’,便真正迈入AI原生协作阶段——本文即围绕AI写代码、团队能力重构两大核心热词,展开可落地的工程实践路径。

weixin_30372371的博客 308

把枚举写干净:ABAP 里的 Interface Pattern 为什么常被判定为反模式,以及更稳的替代方案

本文探讨了ABAP项目中常见的"固定取值集合"管理问题,重点分析了将常量塞入接口的"Interface Pattern"这一劣化模式。文章指出该模式虽然解决了魔法字符分散问题,但存在接口语义滥用、可扩展性差、类型安全性不足等缺陷。针对不同技术场景,作者提出了三种改进方案:使用ABAP 7.51+的原生枚举类型、采用类承载常量的"Constant Pattern"以及实现对象模式的强类型约束。文章还特别分析了SAP Gateway消息处理中的典型问题

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1894
上一篇: 重构实例-消息发送-使用策略进行重构-Map方式-6
下一篇: 跳表
null_null_bug
博客等级 码龄7年 72粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值