Java-組合-設計模式(十)
阿新 • • 發佈:2021-01-22
技術標籤:設計模式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();
}
}
結果
完成了由軟體管理器統一管理軟體安裝的操作。
總結
其實上述的例子並沒有很完美的運用組合模式,因為設定的層級太少,只是簡單的一個示例。
組合模式可以很好的實現一個樹形資料結構,如果想要建立一個多層級的資料結構,並且想以同樣的操作來對待這些元素,組合模式是一個不錯的選擇。