<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                21.2 組合模式的定義 組合模式(Composite Pattern)也叫合成模式,有時又叫做部分-整體模式(Part-Whole),主要是用來描述部分與整體的關系,其定義如下: Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.(將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。) 組合模式的通用類圖,如圖21-6所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036787d2f.jpg) 圖21-6 組合模式通用類圖 我們先來說說組合模式的幾個角色。 ● Component抽象構件角色 定義參加組合對象的共有方法和屬性,可以定義一些默認的行為或屬性,比如我們例子中的getInfo就封裝到了抽象類中。 ● Leaf葉子構件 葉子對象,其下再也沒有其他的分支,也就是遍歷的最小單位。 ● Composite樹枝構件 樹枝對象,它的作用是組合樹枝節點和葉子節點形成一個樹形結構。 我們來看組合模式的通用源代碼,首先看抽象構件,它是組合模式的精髓,如代碼清單21-18所示。 代碼清單21-18 抽象構件 public?abstract?class?Component?{ ?????//個體和整體都具有的共享 ?????public?void?doSomething(){ ?????????????//編寫業務邏輯 ?????} } 組合模式的重點就在樹枝構件,其通用代碼如代碼清單21-19所示。 代碼清單21-19 樹枝構件 public?class?Composite?extends?Component?{ ?????//構件容器 ?????private?ArrayList<Component>?componentArrayList?=?new?ArrayList<Component>(); ?????//增加一個葉子構件或樹枝構件 ?????public?void?add(Component?component){ ?????????????this.componentArrayList.add(component); ?????} ?????//刪除一個葉子構件或樹枝構件 ?????public?void?remove(Component?component){ ?????????????this.componentArrayList.remove(component); ?????} ?????//獲得分支下的所有葉子構件和樹枝構件 ?????public?ArrayList<Component>?getChildren(){ ?????????????return?this.componentArrayList; ?????} } 樹葉節點是沒有子下級對象的對象,定義參加組合的原始對象行為,其通用源代碼如代碼清單21-20所示。 代碼清單21-20 樹葉構件 public?class?Leaf?extends?Component?{ ?????/* ??????*?可以覆寫父類方法 ??????*?public?void?doSomething(){ ??????*? ??????*?} ??????*/ } 場景類負責樹狀結構的建立,并可以通過遞歸方式遍歷整個樹,如代碼清單21-21所示。 代碼清單21-21 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ????????????//創建一個根節點 ?????????????Composite?root?=?new?Composite(); ?????????????root.doSomething(); ?????????????//創建一個樹枝構件 ?????????????Composite?branch?=?new?Composite(); ?????????????//創建一個葉子節點 ?????????????Leaf?leaf?=?new?Leaf(); ?????????????//建立整體 ?????????????root.add(branch); ?????????????branch.add(leaf);?????????? ?????} ?????//通過遞歸遍歷樹 ?????public?static?void?display(Composite?root){ ?????????????for(Component?c:root.getChildren()){ ??????????????????if(c?instanceof?Leaf){?//葉子節點 ??????????????????????????c.doSomething(); ??????????????????}else{?//樹枝節點 ??????????????????????????display((Composite)c); ??????????????????} ?????????????} ?????} } 各位可能已經看出一些問題了,組合模式是對依賴倒轉原則的破壞,但是它還有其他類型的變形,面向對象就是這么多的形態和變化,請讀者繼續閱讀下去,就會找到解決方案。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看