array.of 不是构建者模式,因为它只是内置的静态数组创建方法,不具备分步构造、链式调用、封装创建过程等构建者模式核心特征,仅用于原样转参为数组元素。

Array.of 本身不是设计模式,也不属于构建者模式(Builder Pattern)的实现。它只是一个语言内置的静态数组创建方法,语义明确、行为一致,但不具备构建者模式的核心特征:比如分步骤构造、链式调用、封装复杂对象创建过程、提供可配置的构建流程等。
为什么 Array.of 不是构建者模式
构建者模式通常用于创建结构复杂、可选参数多、需分阶段配置的对象(如 HTML 元素、请求配置、表单验证器等)。而 Array.of 的职责非常单一:
- 接收任意数量的参数,原样转为数组元素
- 不维护内部状态,不支持链式调用(如 Array.of(1).add(2).build() 不存在)
- 无“导演”(Director)角色,也无“具体构建者”类层次
- 不隐藏创建细节,也不提供多种构建变体
但它可被用在构建者模式的内部逻辑中
当你自己实现一个构建者类时,Array.of 可作为底层工具,安全地收集和初始化数组字段,避免 new Array() 带来的歧义。例如:
假设你写一个 OrderBuilder,需要记录商品 ID 列表:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
class OrderBuilder {
constructor() {
this.itemIds = [];
}
addItemId(id) {
// 安全追加,不会因 id 是数字 0/1/5 而误判为长度
this.itemIds = [...this.itemIds, id];
return this;
}
setItemIds(...ids) {
// ✅ 推荐:用 Array.of 明确表达“这些就是元素”,不依赖参数个数
this.itemIds = Array.of(...ids);
return this;
}
build() {
return { itemIds: this.itemIds };
}
}
// 使用
const order = new OrderBuilder()
.setItemsIds(101, 102, 103) // → [101, 102, 103]
.build();
对比:用 new Array() 在构建者中可能出错
如果误用 new Array() 替代 Array.of():
- new Array(101) → 得到长度为 101 的空数组,而非 [101]
- 用户传入单个数字 ID 时,构建者会静默生成错误结构,调试困难
- 这种隐式行为违背构建者模式“意图清晰”的原则
真正接近构建者风格的数组相关方案
若你确实需要链式、可配置的数组构造体验,可自行封装轻量构建者,例如:
class ArrayBuilder {
constructor() {
this.items = [];
}
add(...elements) {
this.items.push(...elements);
return this;
}
prepend(...elements) {
this.items.unshift(...elements);
return this;
}
filterBy(fn) {
this.items = this.items.filter(fn);
return this;
}
build() {
return this.items;
}
}
// 使用
const arr = new ArrayBuilder()
.add(1, 2)
.add('a', 'b')
.filterBy(x => typeof x === 'number')
.build(); // [1, 2]
这类封装才体现构建者思想;Array.of 是其中可靠的底层支撑,而非构建者本身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










