组合模式(Composite Pattern)‌

在 ‌组合模式(Composite Pattern)‌ 中,Component 和 Composite 是两个核心概念,它们共同实现了一种树形结构的对象组织方式,允许客户端以统一的方式处理单个对象和对象组合。以下是它们的定义和区别:

1. Component(抽象组件)‌

概念‌:
Component 是所有对象的抽象基类或接口,定义了所有对象(无论是叶子节点还是组合节点)的通用行为。它声明了管理子组件(添加、删除、获取子组件)的方法,以及执行操作(operation())的方法。

特点‌:

可以是抽象类或接口。
为所有具体类(叶子节点和组合节点)提供统一的接口。
可以包含默认实现或抛出异常(例如,默认不支持子组件操作)。
2. Composite(组合节点)‌

概念‌:
Composite 是 Component 的具体子类,表示可以包含其他子组件(叶子或组合节点)的复杂对象。它通过聚合多个 Component 对象形成树形结构,并实现父类定义的子组件管理方法。

特点‌:

内部维护一个子组件集合(如列表、数组等)。
实现 Component 定义的接口方法,例如添加、删除、遍历子组件。
可以递归调用子组件的 operation() 方法。
3. 二者的核心区别‌
特性‌    ‌Component‌    ‌Composite‌
角色‌    抽象接口/基类,定义统一行为    具体类,实现组合逻辑
子组件管理‌    可能声明子组件管理方法,但默认不实现    具体实现子组件的添加、删除、遍历等逻辑
子组件存储‌    无    内部维护子组件集合(如列表)
操作行为‌    可能直接实现具体操作(如叶子节点)    递归调用子组件的操作
是否包含子组件‌    不直接包含子组件    包含子组件(叶子或组合节点)
4. 示例场景:文件系统‌

Component‌:
抽象类 FileSystemItem,定义方法 display()。

Composite‌:
具体类 Folder,实现 display(),并管理子组件(如文件或其他文件夹)。
例如:调用 folder.display() 会递归显示所有子文件和子文件夹。

Leaf‌:
具体类 File,实现 display(),但无法包含子组件。

java
Copy Code
// Component 接口
interface FileSystemItem {
    void display();
}

// Composite 类
class Folder implements FileSystemItem {
    private List<FileSystemItem> items = new ArrayList<>();

    public void add(FileSystemItem item) {
        items.add(item);
    }

    @Override
    public void display() {
        for (FileSystemItem item : items) {
            item.display(); // 递归调用子组件的 display()
        }
    }
}

// Leaf 类
class File implements FileSystemItem {
    @Override
    public void display() {
        System.out.println("显示文件");
    }
}

5. 总结‌
Component‌ 是统一的抽象接口,隐藏了叶子节点和组合节点的差异。
Composite‌ 是具体实现,负责管理子组件并递归调用其行为。
组合模式的核心目的是通过树形结构实现“部分-整体”的层次关系,让客户端无需关心处理的是单个对象还是组合对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值