設計模式之組合模式

組合模式

組合模式是結構型對象模式的一個實例,它描述瞭如何構造一個類層次式結構,這一結構由兩種類型的對象(基元對象和組合對象)所對應的類構成,其中的組合對象使得你可以組合基元對象以及其他的組合對象,從而形成任意複雜的結構。

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

使用場景

  1. 你想表示對象的部分-整體層次結構

  2. 你希望用戶忽略組合對象與單個對象的不同,用戶將統一地使用組合結構中的所有對象。

結構
組合模式結構圖

實現

public abstract class Component {

    public abstract void operation();

    public abstract void add(Component component);

    public abstract void remove(Component component);

    public abstract Component getChild(int index);

}

public class Composite extends Component{

    private List<Component> children = new ArrayList<Component>();

    @Override
    public void operation() {
        System.out.println("Composite's operation");
    }

    @Override
    public void add(Component component) {
        children.add(component);
    }

    @Override
    public void remove(Component component) {
        children.remove(component);
    }

    @Override
    public Component getChild(int index) {
        return children.get(index);
    }

}

public class Leaf extends Component{

    @Override
    public void operation() {
        System.out.println("Leaf's operation");
    }

    @Override
    public void add(Component component) {
        System.out.println("Can not add to a leaf");
    }

    @Override
    public void remove(Component component) {
        System.out.println("Can not remove from a leaf");
    }

    @Override
    public Component getChild(int index) {
        return null;
    }

}

組合模式常用於樹形結構比如文件系統,二叉樹,目錄之類的,能夠簡化客戶代碼,而且能夠很容易地添加新類型的組件

發佈了34 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章