更新時(shí)間:2023-09-11 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
組合模式(Composite Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許我們將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu)。這種模式使得客戶端可以統(tǒng)一對待單個(gè)對象和組合對象。在Java中,組合模式通常在以下情況下使用:
1.當(dāng)我們有一個(gè)對象結(jié)構(gòu),其中包含了許多相似的對象,它們都可以被處理或操作以相同的方式。組合模式可以幫助我們通過統(tǒng)一的接口對待這些對象。
2.當(dāng)我們希望客戶端代碼能夠以統(tǒng)一的方式處理單個(gè)對象和組合對象,而不需要在客戶端代碼中進(jìn)行復(fù)雜的條件判斷。
3.當(dāng)我們希望能夠輕松地增加或刪除對象,并且不需要修改現(xiàn)有的客戶端代碼。
  下面是一個(gè)簡單的Java示例,演示了組合模式的使用。假設(shè)我們要建立一個(gè)文件系統(tǒng)的模型,其中有文件(Leaf)和文件夾(Composite)。文件夾可以包含文件和其他文件夾,我們使用組合模式來處理這種結(jié)構(gòu):
import java.util.ArrayList;
import java.util.List;
// 抽象組件
interface FileSystemComponent {
    void display();
}
// 葉子節(jié)點(diǎn) - 文件
class File implements FileSystemComponent {
    private String name;
    public File(String name) {
        this.name = name;
    }
    @Override
    public void display() {
        System.out.println("File: " + name);
    }
}
// 組合節(jié)點(diǎn) - 文件夾
class Folder implements FileSystemComponent {
    private String name;
    private List<FileSystemComponent> components = new ArrayList<>();
    public Folder(String name) {
        this.name = name;
    }
    public void addComponent(FileSystemComponent component) {
        components.add(component);
    }
    public void removeComponent(FileSystemComponent component) {
        components.remove(component);
    }
    @Override
    public void display() {
        System.out.println("Folder: " + name);
        for (FileSystemComponent component : components) {
            component.display();
        }
    }
}
public class CompositePatternExample {
    public static void main(String[] args) {
        File file1 = new File("file1.txt");
        File file2 = new File("file2.txt");
        Folder folder1 = new Folder("Folder 1");
        folder1.addComponent(file1);
        folder1.addComponent(file2);
        File file3 = new File("file3.txt");
        Folder folder2 = new Folder("Folder 2");
        folder2.addComponent(file3);
        Folder root = new Folder("Root");
        root.addComponent(folder1);
        root.addComponent(folder2);
        root.display();
    }
}在上面的示例中,我們創(chuàng)建了一個(gè)文件系統(tǒng)的模型,其中文件和文件夾都是 FileSystemComponent 的實(shí)現(xiàn)。文件夾可以包含文件和其他文件夾,客戶端代碼可以一致地處理這些對象,而不需要知道具體是文件還是文件夾。這是組合模式的一個(gè)典型應(yīng)用場景。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19