我的情况如下所述
模型类(M),它包含一个散列图(h)作为私有字段(getter& setter公开)。
一个可以访问(M)的新类(A)需要修改(M)的hashmap(h)
以下哪一项可能是实现此目标的更好方法
一个。用(h)的吸气剂。即 (M).getMap()。每次我想要放(a,b) 填充此地图
湾创建一个本地地图填充它和 然后使用(M).setMap(本地哈希)
℃。在(M)中添加方法 addMapEntry(key,value){(h).put(key, 值);调用(M).addMapEntry in (A)
一个。我们暴露私人参考对象似乎有点不安全。湾会消耗更多的内存,因此我总是喜欢使用c。
有人能说出是否有更好的替代方案来实现这个目标?
感谢。
答案 0 :(得分:2)
下进行。
hashmap代表M状态的一部分,所以M应该控制它的内容。然后调用M的方法可以自由地向地图添加条目,删除它们,甚至完全擦除地图,这取决于操作的语义,所有这些都没有客户端甚至意识到它下面都有一个hashmap。这就是封装的本质。
答案 1 :(得分:0)
(C),毫无疑问。
A至少将“内部”存储的实现与始终基于HashMap联系起来。谁在乎?也许明天它将是一个数据库表,一个属性文件,或一个List ......
B太可怕了。同样的问题A,假设“容器”类可以被多个客户端调用这一事实,你冒着覆盖并发更改的风险,即使它们是针对你不打算触摸的键。