抽象类通过封装状态字段、提供受保护变更方法、定义模板流程及内置观察者机制,统一管理子类状态变更与通知;配合枚举与策略模式解耦状态行为,提升可维护性与可测试性。

抽象类本身不直接管理子类的生命周期或状态变更通知,但它可以作为统一机制的载体,为子类提供标准化的状态管理框架和事件分发能力。关键在于把“状态定义”“变更控制”“通知触发”三件事结构化地收拢到抽象层,而不是让每个子类各自实现一套逻辑。
用抽象基类封装状态字段与变更入口
子类共有的状态字段(如 status、version、createdAt)应声明在抽象类中,并配以受保护的变更方法:
- 定义 protected Status status 和 private int version,避免子类直接赋值
- 提供 protected final void changeStatus(Status newStatus) 方法,在其中完成版本递增、时间戳更新、状态合法性校验
- 所有子类的状态修改必须走这个入口,确保每次变更都有迹可循、可审计
通过模板方法统一状态流转与事件发布
抽象类定义带钩子的模板流程,把“什么时候发通知”固化下来,把“发什么内容”留给子类定制:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 声明 final void transitionTo(Status target):先校验能否跳转 → 调用 beforeTransition()(钩子)→ 执行 changeStatus() → 调用 afterTransition()(钩子)→ 最后触发 notifyStateChanged()
- 子类覆盖 beforeTransition() 做前置检查(如余额不足禁止发货),覆盖 afterTransition() 做后续动作(如发送MQ消息)
- notifyStateChanged() 在抽象类中默认调用观察者列表或事件总线,子类可选择重写以适配不同通知渠道
集成观察者机制支持状态变更监听
抽象类可内置轻量级观察者管理能力,无需依赖 Spring 或第三方库:
- 维护一个 CopyOnWriteArrayList
,线程安全且适合读多写少场景 - 提供 addStateObserver(StateObserver observer) 和 removeStateObserver(...) 公共方法
- 在 notifyStateChanged() 中遍历通知,传递当前对象引用和旧/新状态,便于监听方做业务判断
- 观察者接口只需定义 onStatusChanged(T source, Status oldStatus, Status newStatus),保持简单清晰
配合枚举与策略提升状态行为可维护性
避免在抽象类里堆砌 if-else 判断状态分支,而是把状态行为外移到独立结构中:
- 定义 Status 枚举,每个枚举值关联一个 StateHandler 实例(可用 switch 表达式或 Map 静态初始化)
- 抽象类中保留 getStateHandler() 方法,返回当前状态对应的处理器
- 子类无需知道“待支付状态该做什么”,只需调用 currentStateHandler().onEnter(this),职责清晰、易于测试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










