Java設計模式學習08——組合模式
一、組合模式適用場景
把部分和整體的關係用樹形結構來表示,從而使客戶端可以使用統一的方式對部分物件和整體物件進行管理。
二、組合模式結構
- 抽象構件(Conponent)角色:所有類的共有介面,定義了葉子和容器的共同點。
- 葉子(Leaf)構件角色:在組合中表示葉子結點物件,葉子節點無子節點。
- 容器(Composite)構件角色:有容器特徵,可以 用來儲存子節點,在Component介面中實現與子節點有關操作,如增加(add)和刪除 (remove)等。
組合模式工作流程分析
- 組合模式為處理樹形結構提供了完美的解決方案,描述瞭如何將容器和葉子進行遞迴組合,使得使用者在使用時可以一致性的對待容器和葉子。
- 當容器物件的指定方法被呼叫時,將遍歷整個樹形結構,尋找包含這個方法的成員,並呼叫執行。其中,使用遞迴呼叫機制對整個結構進行處理。
下面通過簡單的防毒例子,使用組合模式:
示例程式碼:
1.抽象構件
public interface AbstractFile {
void killVirus();//防毒
}
2. 葉子構件
class ImageFile implements AbstractFile{
private String name;
public ImageFile(String name){
this.name=name;
}
public void killVirus() {
System.out.println("---對影象檔案"+name+"防毒");
}
}
class TextFile implements AbstractFile{
private String name;
public TextFile(String name){
this.name=name;
}
public void killVirus() {
System.out.println("---對文字檔案"+name+"防毒");
}
}
3. 容器構件
class Folder implements AbstractFile{
private String name;
private ArrayList<AbstractFile> list=new ArrayList<AbstractFile>();
public Folder(String name){
this.name=name;
}
public void add(AbstractFile file){
list.add(file);
}
public void remove(AbstractFile file){
list.remove(file);
}
public AbstractFile getChild(int index){
return list.get(index);
}
public void killVirus() {
System.out.println("---對資料夾"+name+"防毒");
for(AbstractFile file:list){
file.killVirus();
}
}
}
4.客戶端
public class Client {
public static void main(String[] args) {
Folder f1;
AbstractFile f2,f3;
f1=new Folder("我的收藏");
f2=new ImageFile("my.jpg");
f3=new TextFile("my.txt");
f1.add(f2);
f1.add(f3);
f1.killVirus();
}
}
//輸出結果:
---對資料夾我的收藏防毒
---對影象檔案my.jpg防毒
---對文字檔案my.txt防毒
相關文章
- Java設計模式之(十)——組合模式Java設計模式
- C#設計模式學習筆記:(9)組合模式C#設計模式筆記
- 【HeadFirst設計模式學習筆記】10 組合模式設計模式筆記
- 【設計模式】組合模式設計模式
- 設計模式《組合模式》設計模式
- 設計模式-組合模式設計模式
- 設計模式:組合模式設計模式
- js設計模式–組合模式JS設計模式
- js設計模式--組合模式JS設計模式
- 設計模式系列 – 組合模式設計模式
- javascript設計模式組合模式JavaScript設計模式
- 設計模式(十三):組合模式設計模式
- java23種設計模式——八、組合模式Java設計模式
- PHP 設計模式之組合模式PHP設計模式
- GoLang設計模式20 - 組合模式Golang設計模式
- 設計模式【11】-- 搞定組合模式設計模式
- 【C++設計模式】組合模式C++設計模式
- 徒手擼設計模式-組合模式設計模式
- 極簡設計模式-組合模式設計模式
- 設計模式系列之「組合模式」設計模式
- 大話設計模式—組合模式設計模式
- 軟體設計模式————(組合模式)設計模式
- Java設計模式學習Java設計模式
- JAVA設計模式(10):結構型-組合模式(Composite)Java設計模式
- 23種設計模式之組合模式設計模式
- 《Head First 設計模式》:組合模式設計模式
- 【趣味設計模式系列】之【組合模式】設計模式
- javascript設計模式 之 7組合模式JavaScript設計模式
- 設計模式系列7--組合模式設計模式
- 設計模式漫談之組合模式設計模式
- C#設計模式之組合模式C#設計模式
- c#設計模式_全部部分模式_組合模式C#設計模式
- Java設計模式學習三-----工廠模式Java設計模式
- Java設計模式學習二Java設計模式
- 【設計模式自習室】結構型:組合模式 Composite設計模式
- Java設計模式學習筆記(一) 設計模式概述Java設計模式筆記
- 《設計模式四》觀察、組合、享元模式設計模式
- [C++設計模式] composite 組合模式C++設計模式