Java設計模式學習——組合模式

1、組合模式適用場景

把部分和總體的關係用樹形結構來表示,從而使客戶端能夠使用統一的方式對部分對象和總體對象進行管理。
ui

2、組合模式結構

  • 抽象構件(Conponent)角色:全部類的共有接口,定義了葉子和容器的共同點。 
  • 葉子(Leaf)構件角色:在組合中表示葉子結點對象,葉子節點無子節點。 
  • 容器(Composite)構件角色:有容器特徵,能夠 用來存儲子節點,在Component接口中實現與子節點有關操做,如增長(add)和刪除 (remove)等。 

这里写图片描述

組合模式工做流程分析

  • 組合模式爲處理樹形結構提供了完美的解決方案,描述瞭如何將容器和葉子進行遞歸組合,使得用戶在使用時能夠一致性的對待容器和葉子。
  • 當容器對象的指定方法被調用時,將遍歷整個樹形結構,尋找包含這個方法的成員,並調用執行。其中,使用遞歸調用機制對整個結構進行處理。


下面經過簡單的殺毒例子,使用組合模式:
示例代碼:

1.抽象構件
this

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. 容器構件
spa

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.客戶端
3d

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殺毒   
複製代碼
相關文章
相關標籤/搜索