抽象类在建造者模式中承担统一构建契约角色,定义必须实现的步骤和可复用能力,封装共性流程、强制抽象方法、支持模板方法、兼容流式调用。

抽象类在建造者模式中主要承担“统一构建契约”的角色,它不直接创建对象,而是定义好哪些步骤必须实现、哪些能力可以复用,从而让具体建造者专注差异逻辑,避免重复编码。
抽象建造者类封装共性流程
把多个具体建造者都需执行的初始化、校验、默认赋值等操作,抽到抽象类里。比如所有产品对象都需要时间戳、ID生成、状态初始化,这些可统一写在抽象 Builder 中:
- 构造方法中自动 new Product() 并设置基础字段(如 createdAt、status = "DRAFT")
- getResult() 方法统一做终态检查(如必填字段非空校验)再返回 product
- 提供 protected 工具方法,如 validateEmail(String) 或 normalizeName(String),子类可直接调用
强制子类实现关键构建步骤
抽象类用 abstract 方法划清责任边界,确保每个具体建造者必须明确处理核心部件。例如:
- buildHeader()、buildBody()、buildFooter() —— 强制不同报告类型(PDF/HTML/Excel)各自实现对应结构
- 子类无法绕过这些步骤,构建过程不会遗漏关键部分
- 接口清晰,新增一种产品类型时,只需继承抽象类并补全几个 abstract 方法,其余逻辑自动继承
支持模板方法模式增强可控性
在抽象类中定义 final 的构建骨架,把可变部分留给子类,稳定部分由父类把控:
- final build() { init(); buildHeader(); buildBody(); buildFooter(); validate(); }
- 子类不能重写 build(),但可覆写其中任一 protected 模板方法(如 init())来定制初始化行为
- 既保证流程顺序不变,又保留灵活扩展点,避免子类误调顺序或跳过步骤
与流式 Builder 兼容,提升易用性
抽象类可声明返回 this 的构建方法,为链式调用打基础:
- 每个 buildXxx() 方法末尾写 return this;,子类自动获得流畅 API
- 客户端代码变成:new UserBuilder().name("Alice").email("a@b.com").role("ADMIN").build()
- 抽象类统一管理 this 类型(用泛型
> ),确保子类链式调用不丢失类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











