设计模式--组合模式

组合模式

组合模式(Composite Pattern)允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式让客户端可以统一地处理单个对象和组合对象。在这个模式中,组合对象(Composite)和叶子对象(Leaf)会实现相同的接口。

下面是一个使用组合模式的简单案例,我们将构建一个文件系统的表示,其中可以包含文件夹(组合对象)和文件(叶子对象)。

首先,定义一个公共接口 IFileSystemEntry,该接口将由文件夹和文件实现:

java

interface IFileSystemEntry {  
    void list();  
}
然后,定义叶子对象 File,它实现了 IFileSystemEntry 接口:

java
class File implements IFileSystemEntry {  
    private String name;  
  
    public File(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public void list() {  
        System.out.println("File: " + name);  
    }  
}

接着,定义组合对象 Folder,它也实现了 IFileSystemEntry 接口,并且可以包含多个 IFileSystemEntry 对象(即文件夹或文件):

java

import java.util.ArrayList;  
import java.util.List;  
  
class Folder implements IFileSystemEntry {  
    private String name;  
    private List<IFileSystemEntry> children = new ArrayList<>();  
  
    public Folder(String name) {  
        this.name = name;  
    }  
  
    public void add(IFileSystemEntry entry) {  
        children.add(entry);  
    }  
  
    @Override  
    public void list() {  
        System.out.println("Folder: " + name);  
        for (IFileSystemEntry entry : children) {  
            entry.list();  
        }  
    }  
}

最后,我们可以构建一个包含文件夹和文件的文件系统,并演示如何使用 list() 方法来列出所有文件和文件夹:

java

public class CompositePatternDemo {  
    public static void main(String[] args) {  
        // 创建文件夹和文件  
        Folder root = new Folder("root");  
        Folder folder1 = new Folder("folder1");  
        Folder folder2 = new Folder("folder2");  
        File file1 = new File("file1.txt");  
        File file2 = new File("file2.txt");  
  
        // 组织结构  
        root.add(folder1);  
        root.add(folder2);  
        folder1.add(file1);  
        folder2.add(file2);  
  
        // 打印文件系统  
        root.list();  
    }  
}

输出结果:

Folder: root  
Folder: folder1  
File: file1.txt  
Folder: folder2  
File: file2.txt

这个示例展示了组合模式的基本应用,即如何通过递归调用 list() 方法来统一处理文件和文件夹的列表展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方大拿拿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值