在业务系统开发中,核心变量如配置集合、基础数据缓存等通常需要全局共享,但只允许特定模块修改,业务层仅能读取使用。如果直接暴露可修改的集合对象,初级开发人员可能会无意中调用修改方法导致数据异常,只读迭代器模式可以从访问层面解决这类问题。

只读迭代器模式的核心思路
只读迭代器的本质是包装原始的可修改迭代器,对外只暴露读取相关的方法,屏蔽所有修改操作。原始迭代器支持next()、remove()等修改方法,而只读迭代器只保留hasNext()、next()等读取方法,当调用修改方法时直接抛出异常,从接口层面杜绝修改可能。
Java语言下的实现示例
首先定义基础的迭代器接口,然后实现只读迭代器的包装类:
import java.util.Iterator;
import java.util.NoSuchElementException;
// 只读迭代器实现类
public class ReadonlyIterator<T> implements Iterator<T> {
// 原始迭代器
private final Iterator<T> originalIterator;
public ReadonlyIterator(Iterator<T> originalIterator) {
this.originalIterator = originalIterator;
}
@Override
public boolean hasNext() {
return originalIterator.hasNext();
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException("没有更多元素");
}
return originalIterator.next();
}
// 屏蔽remove方法,调用时抛出异常
@Override
public void remove() {
throw new UnsupportedOperationException("只读迭代器不支持删除操作");
}
}
业务层封装实战
假设我们有一个核心的配置集合,只允许配置管理模块修改,业务层只能读取,我们可以封装一个配置访问类:
import java.util.ArrayList;
import java.util.List;
// 核心配置管理类
public class CoreConfigManager {
// 核心配置集合,仅内部可修改
private final List<String> coreConfigs = new ArrayList<>();
// 初始化配置
public CoreConfigManager() {
coreConfigs.add("db.url");
coreConfigs.add("redis.host");
coreConfigs.add("api.timeout");
}
// 仅允许内部调用修改配置
public void addConfig(String config) {
coreConfigs.add(config);
}
// 对外提供只读迭代器,业务层无法修改
public Iterator<String> getReadonlyConfigIterator() {
return new ReadonlyIterator<>(coreConfigs.iterator());
}
}
业务层使用时只能遍历读取,无法修改:
public class BusinessService {
public void printConfigs(CoreConfigManager configManager) {
Iterator<String> iterator = configManager.getReadonlyConfigIterator();
while (iterator.hasNext()) {
String config = iterator.next();
System.out.println("当前配置:" + config);
}
// 以下代码会抛出UnsupportedOperationException异常
// iterator.remove();
}
}
使用注意事项
- 只读迭代器仅包装迭代器本身,如果迭代的元素是可变对象,依然需要额外封装元素的只读访问接口,避免通过元素修改数据。
- 异常提示要清晰,当业务层调用修改方法时,抛出明确的异常信息,方便开发人员快速定位问题。
- 可以在团队代码规范中明确要求,所有暴露给业务层的核心数据集合都必须通过只读迭代器提供访问入口。
适用场景
该模式适合所有需要共享但限制修改的核心数据场景,比如全局配置、基础数据字典、缓存快照等,尤其适合团队中有较多初级开发人员的项目,从代码层面减少越权修改的风险。
ReadonlyIterator迭代器模式核心变量保护业务层权限控制修改时间:2026-06-20 22:03:16