Java Iterator 遍历建造者模式怎么用
在 java 中,iterator 遍历建造者模式(builder pattern)的核心做法是让构建好的对象实现 iterable<t></t> 接口,并在其 iterator() 方法中返回一个迭代器。这样外部代码就可以直接使用增强 for 循环(即 for-each 语法)来遍历该对象内部封装的数据集合,而无需暴露内部数据结构的具体类型。通过这种方式,既保持了建造者模式对复杂对象构建过程的封装,又提供了标准的遍历访问能力。

如何为 Builder 构建的对象实现 Iterable 接口
要让建造者模式生成的对象支持遍历,必须在最终构建出的类(通常是 Product 或具体业务类)中实现 java.lang.Iterable 接口。这意味着你需要提供一个返回 Iterator 实例的方法。通常,如果内部数据存储在 List 或 Collection 中,可以直接委托给内部集合的 iterator() 方法;如果是自定义结构,则需要手动实现迭代逻辑。关键在于,这个实现必须放在“产品”类上,而不是“建造者”类上,因为迭代的是构建完成后的结果。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// 1. 定义产品类,实现 Iterable 接口
class Menu {
private List<String> items = new ArrayList<>();
// 核心:实现 iterator() 方法
@Override
public Iterator<String> iterator() {
return items.iterator();
}
// 提供添加项的方法,供 Builder 使用
public void addItem(String item) {
items.add(item);
}
}
// 2. 定义建造者类
class MenuBuilder {
private Menu menu = new Menu();
public MenuBuilder addDish(String dishName) {
menu.addItem(dishName);
return this;
}
public Menu build() {
return menu;
}
}
// 3. 测试遍历
public class Main {
public static void main(String[] args) {
MenuBuilder builder = new MenuBuilder();
builder.addDish("Pizza")
.addDish("Burger")
.addDish("Salad");
Menu menu = builder.build();
// 直接使用 for-each 遍历,底层调用 iterator()
for (String dish : menu) {
System.out.println(dish);
}
}
}上述代码展示了完整的实现路径。首先,Menu 类实现了 Iterable<string></string>,其 iterator() 方法直接返回内部 ArrayList 的迭代器。其次,MenuBuilder 负责构建 Menu 对象,通过链式调用添加菜品。最后,在 Main 类中,获取构建好的 menu 对象后,直接使用 for (String dish : menu) 进行遍历。这种写法简洁且符合 Java 标准库的习惯,开发者无需关心内部是列表、数组还是其他集合,只要实现了 Iterable 即可。
立即学习“Java免费学习笔记(深入)”;
基于程序中某个输入、条件或结果的具体问题
当建造者构建的对象内部包含多个不同类型的子组件时,例如一个 Computer 对象由 CPU、Memory 和 Storage 组成,如果希望分别遍历这些组件,直接在主对象上实现单一的 Iterable 可能会造成类型混乱。此时,具体的做法是为每个子组件类也实现 Iterable,或者在主对象的 iterator() 中返回一个组合迭代器。如果仅关注单个输入条件下的结果,比如只添加了 CPU 而没有添加 Memory,遍历行为取决于内部集合的状态。若内部集合允许空值或未初始化,需确保 iterator() 不会抛出 NullPointerException。在实际代码中,我们通常初始化内部集合为空而非 null,从而保证即使没有添加任何组件,遍历操作也能安全地返回一个空的迭代器,不会中断程序流程。


















