我正在经历复合设计模式,发现java.util.Map#putAll(Map)在JDK中被称为example复合模式。我无法理解它是如何遵循复合模式的。 关于它我几乎没有问题如下。
- putAll(map)如何是复合模式?
- 使用putAll时如何定义部分整体关系?
醇>
任何人都可以帮助我理解它。
答案 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
操作撰写,但这会违反LSP和source of astonishment。