arrays.copyof 隐含工厂方法与适配器的混合特征:每次返回全新数组,封装创建与初始化逻辑;自动处理长度变化(截取或填充默认值),适配不同容量需求;以极简封装替代复杂模式,专注低门槛、高可靠数组复制。

Arrays.copyOf 本身不直接体现某种经典设计模式,但它在使用意图和结构上,隐含了“工厂方法”与“适配器”的混合特征。它不是为遵循某一种模式而设计,而是围绕数组操作的常见需求(复制、扩容、截断)做了简洁封装,其背后的设计逻辑更偏向实用主义而非模式教条。
它像一个轻量级的工厂方法
Arrays.copyOf 每次调用都返回一个**全新数组对象**,不复用原数组内存,也不修改原数组。这种“创建新实例 + 初始化内容”的行为,符合工厂方法的核心思想:将对象的构造过程封装起来,由方法统一负责生成符合要求的对象(这里是特定长度、带默认填充的新数组)。
它不暴露 new 数组的细节,也不要求调用者预分配目标数组——这些都由方法内部完成,相当于把“数组实例化+填充”这一组合动作封装成一个可复用的构造入口。
它也承担了类型与长度的适配职责
当 newLength ≠ original.length 时,copyOf 自动处理两种边界情况:
• 若 newLength 更小 → 截取前 N 个元素(适配“容量缩小”场景)
• 若 newLength 更大 → 补齐默认值(适配“容量扩大”场景)
这种对输入长度与输出长度不一致的自动协调,本质上是一种**适配行为**:让源数组“适配”目标长度规格,屏蔽底层 arraycopy 的索引计算和边界判断,对外提供统一语义的接口。
它回避了策略/模板等复杂模式,选择极简封装
对比 System.arraycopy —— 后者是纯粹的底层搬运工,要求调用者自己准备目标数组、指定起止位置、控制长度,灵活性高但使用门槛高。
copyOf 则主动放弃精细控制权,用固定起点(0)、固定方向(顺序拷贝)、固定填充规则(类型默认值),换来的是零配置、低出错率、语义清晰。这其实是对“简单即可靠”原则的践行,而不是套用策略模式去动态切换复制逻辑。
注意:它不是深克隆工具,也不伪装成 builder
虽然 copyOf 返回新数组,但对引用类型元素只复制引用地址(浅拷贝),这意味着它不解决对象图一致性问题,也不试图模拟构建复杂对象的过程。它不累积配置(如 builder 那样链式调用),也不根据参数动态选择算法分支(如策略模式)。它的“模式感”来自职责聚焦与接口收敛,而非结构模仿。











