From 30be911b3bcbe5f9d8e2d57ee04210380d42fd1a Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Fri, 30 Oct 2026 20:19:45 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=20-=20=E7=BB=84=E5=90=88.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整代码示例中的输出文案,补充组合模式接口设计的说明;精简 JDK 中的应用示例并补充 Container 递归说明;对参考文献进行文字校对。 --- notes/设计模式 - 组合.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/notes/设计模式 - 组合.md b/notes/设计模式 - 组合.md index 31fd5141..37f286e6 100644 --- a/notes/设计模式 - 组合.md +++ b/notes/设计模式 - 组合.md @@ -75,7 +75,7 @@ public class Leaf extends Component { for (int i = 0; i < level; i++) { System.out.print("--"); } - System.out.println("left:" + name); + System.out.println("Leaf:" + name); } @Override @@ -113,22 +113,21 @@ public class Client { ```text Composite:root ---left:1 +--Leaf:1 --Composite:2 -----left:21 +----Leaf:21 ----Composite:22 -------left:221 ---left:3 +------Leaf:221 +--Leaf:3 ``` +root.print() 只调用了一次,Composite 把调用转给每个子节点,遇到子组合再继续向下,因此客户端不用区分叶子和组合。这里把 add()、remove() 声明在 Component 中,叶子调用时只能在运行时抛出异常;另一种做法是只在 Composite 中声明这两个方法,更安全,但客户端添加子节点前要先判断类型。 + ### JDK 中的应用 - javax.swing.JComponent#add(Component) -- java.awt.Container#add(Component) -- java.util.Map#putAll(Map) -- java.util.List#addAll(Collection) -- java.util.Set#addAll(Collection) +- java.awt.Container#add(Component):Container 本身也是 Component,窗口里可以放面板,面板里再放按钮,绘制和布局时统一按 Component 递归处理。 ## 参考资料 - 弗里曼. Head First 设计模式 [M]. 中国电力出版社, 2007. -- Gamma E. 设计模式: 可复用面向对象软件的基础 [M]. 机械工业出版社, 2007. +- Gamma E. 设计模式:可复用面向对象软件的基础 [M]. 机械工业出版社, 2007.