11.1.2 使用组合(Composite)模式

    银行一般有很多分行,这些分行分布在不同的地方,分行下面可能还有其他分支机构。为了显示银行的组织结构,我们使用组合模式,首先为抽象父类BranchComponent定义一个display()方法。它还包括getName()和getDiscription()两个方法分别用以得到银行的名称和描述。

    UML静态类图如图11-2所示。

    figure_0167_0173

    图11-2

    BranchComponent类即为我们的Component类(这里未使用接口),供分支类BranchLeaf和叶子类BranchComposite继承。

    BranchComponent类的代码如下所示。

    figure_0167_0174

    figure_0168_0175

    分支类BranchComposite的代码片段大致如下所示。

    figure_0168_0176

    figure_0169_0177

    BranchComposite类的display()方法除了显示自己的信息外,还要递归地显示所有子节点的信息,我们使用for-each循环[1]显示子节点信息。

    figure_0169_0178

    它还包含管理子节点的方法:add(BranchComponent child)、remove(BranchComponent child)和getChild(int i)。

    叶子类BranchLeaf的代码片段大致如下所示。

    figure_0170_0179

    [1]Java 5及以上版本的新语法,参见附录A的推荐资源。