<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 樹形結構的處理——組合模式(五) 11.5 公司組織結構 在學習和使用組合模式時,Sunny軟件公司開發人員發現樹形結構其實隨處可見,例如Sunny公司的組織結構就是“一棵標準的樹”,如圖11-8所示: ![](http://img.my.csdn.net/uploads/201209/07/1347031375_3204.jpg) 圖11-8 Sunny公司組織結構圖 在Sunny軟件公司的內部辦公系統Sunny OA系統中,有一個與公司組織結構對應的樹形菜單,行政人員可以給各級單位下發通知,這些單位可以是總公司的一個部門,也可以是一個分公司,還可以是分公司的一個部門。用戶只需要選擇一個根節點即可實現通知的下發操作,而無須關心具體的實現細節。這不正是組合模式的“特長”嗎?于是Sunny公司開發人員繪制了如圖11-9所示結構圖: ![](http://img.my.csdn.net/uploads/201209/07/1347031422_5635.jpg) 圖11-9 Sunny公司組織結構組合模式示意圖 在圖11-9中,“單位”充當了抽象構件角色,“公司”充當了容器構件角色,“研發部”、“財務部”和“人力資源部”充當了葉子構件角色。 思考 如何編碼實現圖11-9中的“公司”類? 11.6 組合模式總結 組合模式使用面向對象的思想來實現樹形結構的構建與處理,描述了如何將容器對象和葉子對象進行遞歸組合,實現簡單,靈活性好。由于在軟件開發中存在大量的樹形結構,因此組合模式是一種使用頻率較高的結構型設計模式,Java SE中的AWT和Swing包的設計就基于組合模式,在這些界面包中為用戶提供了大量的容器構件(如Container)和成員構件(如Checkbox、Button和TextComponent等),其結構如圖11-10所示: ![](http://img.my.csdn.net/uploads/201209/07/1347031445_5687.jpg) 圖11-10 AWT組合模式結構示意圖 在圖11-10中,Component類是抽象構件,Checkbox、Button和TextComponent是葉子構件,而Container是容器構件,在AWT中包含的葉子構件還有很多,因為篇幅限制沒有在圖中一一列出。在一個容器構件中可以包含葉子構件,也可以繼續包含容器構件,這些葉子構件和容器構件一起組成了復雜的GUI界面。 除此以外,在XML解析、組織結構樹處理、文件系統設計等領域,組合模式都得到了廣泛應用。 1. 主要優點 組合模式的主要優點如下: (1) 組合模式可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,它讓客戶端忽略了層次的差異,方便對整個層次結構進行控制。 (2) 客戶端可以一致地使用一個組合結構或其中單個對象,不必關心處理的是單個對象還是整個組合結構,簡化了客戶端代碼。 (3) 在組合模式中增加新的容器構件和葉子構件都很方便,無須對現有類庫進行任何修改,符合“開閉原則”。 (4) 組合模式為樹形結構的面向對象實現提供了一種靈活的解決方案,通過葉子對象和容器對象的遞歸組合,可以形成復雜的樹形結構,但對樹形結構的控制卻非常簡單。 2. 主要缺點 組合模式的主要缺點如下: 在增加新構件時很難對容器中的構件類型進行限制。有時候我們希望一個容器中只能有某些特定類型的對象,例如在某個文件夾中只能包含文本文件,使用組合模式時,不能依賴類型系統來施加這些約束,因為它們都來自于相同的抽象層,在這種情況下,必須通過在運行時進行類型檢查來實現,這個實現過程較為復雜。 3. 適用場景 在以下情況下可以考慮使用組合模式: (1) 在具有整體和部分的層次結構中,希望通過一種方式忽略整體與部分的差異,客戶端可以一致地對待它們。 (2) 在一個使用面向對象語言開發的系統中需要處理一個樹形結構。 (3) 在一個系統中能夠分離出葉子對象和容器對象,而且它們的類型不固定,需要增加一些新的類型。 練習 > Sunny軟件公司欲開發一個界面控件庫,界面控件分為兩大類,一類是單元控件,例如按鈕、文本框等,一類是容器控件,例如窗體、中間面板等,試用組合模式設計該界面控件庫。
                  <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>

                              哎呀哎呀视频在线观看