需要面向对象的提示

时间:2010-08-03 11:05:53

标签: oop

我的情况如下所述

模型类(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。

有人能说出是否有更好的替代方案来实现这个目标?

感谢。

2 个答案:

答案 0 :(得分:2)

下进行。

hashmap代表M状态的一部分,所以M应该控制它的内容。然后调用M的方法可以自由地向地图添加条目,删除它们,甚至完全擦除地图,这取决于操作的语义,所有这些都没有客户端甚至意识到它下面都有一个hashmap。这就是封装的本质。

答案 1 :(得分:0)

(C),毫无疑问。

A至少将“内部”存储的实现与始终基于HashMap联系起来。谁在乎?也许明天它将是一个数据库表,一个属性文件,或一个List ......

B太可怕了。同样的问题A,假设“容器”类可以被多个客户端调用这一事实,你冒着覆盖并发更改的风险,即使它们是针对你不打算触摸的键。