java.util.Map的复合设计模式#putAll(Map)

时间:2017-04-09 15:44:36

标签: java design-patterns

我正在经历复合设计模式,发现java.util.Map#putAll(Map)在JDK中被称为example复合模式。我无法理解它是如何遵循复合模式的。 关于它我几乎没有问题如下。

  
      
  1. putAll(map)如何是复合模式?
  2.   
  3. 使用putAll时如何定义部分整体关系?
  4.   

任何人都可以帮助我理解它。

1 个答案:

答案 0 :(得分:2)

  

我无法理解它是如何遵循复合模式的。

别担心,这只是因为不是复合模式的一个例子。

java.util.Map#putAll(Map m)变异Map this以添加其中的所有其他Map m元素。之后,这两张地图没有父子关系。

如果组成它们,那么这个测试将通过:

Map<String, String> map = new HashMap<>();
Map<String, String> child = new HashMap<>();
map.putAll(child); // "Compose" map and child according to article author
child.put("A", "1"); // modify child
assertEquals("1", map.get("A")); // Fails, map is not composed of child

我在那里使用过HashMap,但Map的所有Java实现都会以这种方式工作,所以任何理智的Map实现都应该如此。您可以编写自己的Map实现来进行此putAll操作撰写,但这会违反LSPsource of astonishment