1. 程式人生 > 其它 >Java-組合-設計模式(十)

Java-組合-設計模式(十)

技術標籤:設計模式Java基礎設計模式java資料結構程式語言

說明

組合模式,將物件組合成樹形結構以表示“部分-整體”的層次結構。

一般包含三種角色:
抽象(Component)角色:所有類的公共介面,定義了葉子和容器的共同點。
葉子(Leaf)角色:葉子節點無子節點。
容器(Composite)角色:用來儲存子節點,如對子節點的增刪操作。

程式碼

以使用軟體管理器安裝軟體為例,軟體概念為抽象角色,定義為公共介面,軟體管理器為容器角色,用來儲存軟體,具體型別的軟體為葉子角色,由軟體管理器來管理。程式碼如下。

軟體介面

/**
 * @author ctl
 * @date 2021/1/21
 * 軟體
 * 組合模式中抽象的角色,定義葉子和容器的公共點
 */
public interface Software { void install(); }

編碼軟體

/**
 * @author ctl
 * @date 2021/1/21
 * 編碼軟體
 * 組合模式中葉子角色,沒有子節點
 */
public class CodeSoftware implements Software {

    @Override
    public void install() {
        System.out.println("安裝編碼軟體...");
    }
}

畫圖軟體

/**
 * @author ctl
 * @date 2021/1/21
 * 畫圖軟體
 * 組合模式中葉子角色,沒有子節點
 */
public class DrawSoftware implements Software { @Override public void install() { System.out.println("安裝畫圖軟體..."); } }

軟體管理器

/**
 * @author ctl
 * @date 2021/1/21
 * 軟體管理器
 * 組合模式中容器的角色,儲存子節點並實現增刪操作
 */
public class SoftwareManager implements Software {

    private List<
Software>
softwareList = new ArrayList<>(); public void add(Software software) { softwareList.add(software); } public void remove(Software software) { softwareList.remove(software); } @Override public void install() { for (Software software : softwareList) { software.install(); } } }

測試類

/**
 * @author ctl
 * @date 2021/1/21
 */
public class CombinationMain {

    public static void main(String[] args) {
        SoftwareManager softwareManager = new SoftwareManager();
        softwareManager.add(new CodeSoftware());
        softwareManager.add(new DrawSoftware());
        softwareManager.install();
    }
}

結果
結果
完成了由軟體管理器統一管理軟體安裝的操作。

總結

其實上述的例子並沒有很完美的運用組合模式,因為設定的層級太少,只是簡單的一個示例。

組合模式可以很好的實現一個樹形資料結構,如果想要建立一個多層級的資料結構,並且想以同樣的操作來對待這些元素,組合模式是一個不錯的選擇。