迭代器模式(Iterator Pattern) 迭代器模式就是:提供一种方法,让我们能"一个接一个"地访问集合中的元素,而不暴露它的内部结构。
java
/**
* 迭代器接口 - 定义遍历集合的基本操作
* @param <T> 集合元素类型
*/
public interface Iterator<T> {
/**
* 是否还有下一个元素
*/
boolean hasNext();
/**
* 获取下一个元素
*/
T next();
}
java
/**
* 菜单项 - 包含名称和权限码
*/
public class MenuItem {
private String name;
private String permissionCode;
public MenuItem(String name, String permissionCode) {
this.name = name;
this.permissionCode = permissionCode;
}
public String getName() {
return name;
}
public String getPermissionCode() {
return permissionCode;
}
@Override
public String toString() {
return "MenuItem{name='" + name + "', permissionCode='" + permissionCode + "'}";
}
}
java
import java.util.ArrayList;
import java.util.List;
/**
* 菜单容器 - 支持添加菜单项并提供迭代器进行遍历
*/
public class Menu {
private List<MenuItem> menuItems = new ArrayList<>();
public void add(MenuItem menuItem) {
menuItems.add(menuItem);
}
public void remove(MenuItem menuItem) {
menuItems.remove(menuItem);
}
public Iterator<MenuItem> iterator() {
return new MenuIterator();
}
/**
* 内部类:菜单迭代器
*/
private class MenuIterator implements Iterator<MenuItem> {
private int currentIndex = 0;
@Override
public boolean hasNext() {
return currentIndex < menuItems.size();
}
@Override
public MenuItem next() {
if (!hasNext()) {
throw new RuntimeException("No more items");
}
return menuItems.get(currentIndex++);
}
}
}
java
/**
* 迭代器模式演示 - 模拟权限系统中菜单的遍历场景
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
Menu menu = new Menu();
menu.add(new MenuItem("Dashboard", "dashboard:view"));
menu.add(new MenuItem("User Management", "user:manage"));
menu.add(new MenuItem("System Settings", "settings:admin"));
System.out.println("Using Iterator to traverse menu:");
Iterator<MenuItem> iterator = menu.iterator();
while (iterator.hasNext()) {
MenuItem item = iterator.next();
System.out.println("- " + item);
}
}
}