国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式-組合模式

2019-11-08 00:27:25
字體:
來源:轉載
供稿:網友

1.組合模式的定義及使用場景

組合模式也稱為部分整體模式,結構型設計模式之一,組合模式比較簡單,它將一組相似的對象看作一個對象處理,并根據一個樹狀結構來組合對象,然后提供一個統一的方法去訪問相應的對象,以此忽略掉對象與對象集合之間的差別。生活中一個比較經典的例子就是組織結構的樹狀圖。 這里寫圖片描述

定義:

將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性

使用場景:

維護和展示部分-整體關系的場景,如樹形菜單、文件和文件夾管理從一個整體中能夠獨立出部分模塊或功能的場景

這里寫圖片描述

2. 組合模式的優缺點

2.1優點

組合模式可以清楚地定義分層次的復雜對象,表示對象的全部或部分層次,它讓高層模塊忽略了層次的差異,方便對整個層級結構進行控制高層模塊可以一致地使用一個組合結構或其中單個對象,不必關心處理的是單個對象還是整個組合結構,簡化了高層模塊的代碼在組合模式中增加新的枝干構件和葉子構件都很方便,無需對現有類庫進行任何修改組合模式為樹形結構的面向對象實現提供了一種靈活的解決方案,通過葉子對象和枝干對象的遞歸組合,可以形成復雜的樹形結構,但對樹形結構的控制卻非常簡單

2.2缺點

在新增構件時不好對枝干中的構件類型進行限制,不能依賴類型系統來施加這些約束,因為在大多數情況下,他們都來自于相同的抽象層,此時,必須進行類型檢查來實現,過程比較復雜

3.注意事項

組合模式有兩種不同的實現:透明模式和安全模式(4點中為安全模式),透明模式是把用來組合使用的方法放到抽象類中,不管葉子對象還是樹枝對象都有相同的結構。這種模式的缺點是通過判斷getChildren的返回值確認是葉子節點還是樹枝節點,如果處理不當,會在運行期出現問題,安全模式它是把樹枝節點和葉子節點徹底分開,樹枝節點單獨擁有用來組合的方法。

4. 組合模式的實現方式

public abstract class Component { public void doSomething() { }}public class Composite extends Component { PRivate ArrayList<Component> componentArrayList = new ArrayList<>(); public void add(Component component) { componentArrayList.add(component); } public void remove(Component component) { componentArrayList.remove(component); } public ArrayList<Component> getChildren() { return this.componentArrayList; } @Override public void doSomething() { System.out.println("Composite do something"); }}public class Leaf extends Component { @Override public void doSomething() { System.out.println("Leaf do someThing"); }}public class Test { public static void main(String args[]) { //創建一個根節點 Composite root = new Composite(); root.doSomething(); //創建一個樹枝構件 Composite barnch = new Composite(); //創建一個葉子節點 Leaf leaf = new Leaf(); //建立整體 root.add(barnch); barnch.add(leaf); //遍歷 display(root); } public static void display(Composite composite) { for (Component c : composite.getChildren()) { if (c instanceof Leaf) { c.doSomething(); } else { display((Composite) c); } } }}

5. 組合模式在Android中的實際應用

Android源碼中關于組合模式有一個非常經典的實現,我們幾乎每天都會使用到,那就是View和ViewGroup的嵌套組合。

這里寫圖片描述

這里省略了View和ViewGroup的一些方法,在Android的這個視圖層級中,容器一定是ViewGroup,而且只有ViewGroup才能包含其他的View,例如Realyout能包含TextView、Button等,但反過來TextView不能包含Relayout,因為TextView直接繼承了View,并不是一個容器,這里View的視圖層級中使用的其實是一種安全的設計模式。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗田县| 华池县| 商城县| 濮阳县| 金川县| 河东区| 酉阳| 建平县| 石河子市| 冷水江市| 赤水市| 新昌县| 绥阳县| 抚宁县| 崇文区| 辛集市| 大邑县| 黑河市| 前郭尔| 航空| 定州市| 连山| 元阳县| 安丘市| 榕江县| 虞城县| 洛川县| 万全县| 油尖旺区| 安化县| 博罗县| 山阳县| 绥德县| 德化县| 阜新市| 娄底市| 东明县| 项城市| 固始县| 安庆市| 邹城市|