【发布时间】:2017-07-28 09:56:30
【问题描述】:
我面临一个设计问题,要求我维护一个地图,比如Map<String, List<String>>
我需要能够返回此地图的一个不可修改的实例,这样任何访问 API 的人都无法篡改底层地图。
Class InMemoryDB {
private Map<String,List<String>> typeSlabValuesMap;
public List<String> getSlabs(String typeValue){
if (typeSlabValuesMap.containsKey(typeValue) {
return Collections.unmodifiableList(typeSlabValuesMap.get(typeValue);
}
return Collections.emptyList();
}
}
现在我还应该能够在需要时更改地图,例如
- 一个新类型进来了,我应该可以添加类型和slab值
- 需要更改板值我应该能够使用这些值更新地图
现在假设我只能在一个不可修改的列表中公开getSlabs,我应该如何设计上面提到的这张地图的更新部分?
【问题讨论】:
-
您尝试过什么来解决您的问题?
-
显示效果
-
需要返回不可修改的地图还是不可修改的列表??
-
当您将其提供给外部世界时,请尝试返回 Map / List 的克隆而不是实际的 Collection,以确保底层不会被修改。您应该能够通过您的 setter 方法修改原始 Collection,该方法可以具有适当的访问修饰符来限制访问。
标签: java oop design-patterns collections