介紹
我們的計算機都擁有檔案系統,資料夾裡面既可以放入檔案,也可以放入子資料夾。在子資料夾中,一樣地既可以放入檔案,也可以放入子資料夾。檔案系統是一種容器結構、遞迴結構。
組合模式就是用於創造出這樣的結構的模式。組合模式又叫部分整體模式,用於把一組相似的物件當做乙個單一的物件,它將物件組合成樹形結構以表示「部分-整體」的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。
實現
在組合模式中,一共有以下幾個角色:
leaf(樹葉)
表示「內容」的角色。該角色不能放入其他的物件。
composite(複合物)
表示容器的角色。可以在其中放入leaf角色和composite角色。
component
使leaf角色和composite角色具有一致性的角色。component角色是leaf角色和composite角色的父類。
client
組合模式的使用者。
以檔案系統的顯示為例,我們寫一段示例程式。
entry類(扮演component角色)
public abstract class entry
public string getname()
public abstract entry add(entry entry);
public abstract boolean delete(entry entry);
public abstract linkedlist getchild();
}
directory類(扮演composite角色)public class directory extends entry
@override
public entry add(entry entry)
@override
public boolean delete(entry entry)
@override
public linkedlistgetchild()
}
file類(扮演leaf角色)public class file extends entry
@override
public entry add(entry entry)
@override
public boolean delete(entry entry)
@override
public linkedlist getchild()
}
client類(扮演client角色)public class client
public static void showdirectory(entry entry, string prefix) else
}if (entry.getchild().size() == 0)
} else }}
輸出結果/root/tmp
/root/home
/root/usr/bin
/root/usr/lib
tips上面的實現方式為透明模式的組合模式,即add()、remove()、getchild()方法在父類申明,不管directory類還是file類都可見,如果使用不當呼叫了file類的實現方法,程式會丟擲異常。
因此,組合模式還有另外一種實現方式→安全模式,即將add()、remove()、getchild()方法單獨放在directory類中,file類無法呼叫。類圖如下:
組合模式總結
java設計模式之組合模式
組合模式 允許你將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。組合模式類圖 client 客戶使用component介面操作組合中的物件。component component為組合中的所有物件定義乙個介面,不管是組合還是節點,component...
java設計模式之組合模式
一 組合模式簡介 組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。composite使得使用者對單個物件和組合物件的使用具有一致性。有時候又叫做部分 整體模式,它使我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜...
《Java設計模式之組合模式》
組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。新增節點 public abstract void add component c 刪除節點 public abstract void remove component c 顯示節點...