Java23种设计模式-结构型模式之组合模式

组合模式(Composite Pattern):将对象组合成树状结构以表示"部分-整体"层次结构,同时保持对单个对象和组合对象的一致性操作,主要目的是简化客户端代码,因为它可以统一处理单个对象和组合对象。

通常包含以下几个角色:

角色1.抽象组件(Component):声明了组合对象和叶子对象的公共接口,让客户端可以统一处理

角色2.叶子对象(Leaf):实现抽象组件 接口表示 树结构中的叶节点,不包含子组件。

角色3.组合对象(Composite)也实现抽象组件接口,包含并管理子组件实现树结构中的分支节点

角色4.客户端(Client):通过抽象组件接口来操作叶子对象和组合对象

优点

1.清晰的结构:能清晰地表达对象的组合关系。

2.一致性处理:可以一致地处理单个对象和组合对象。

3.方便扩展:便于添加新的组件或子组件。

4.安全性:封装了组件的内部结构,提高了安全性。

缺点
1.设计复杂:组合模式的设计相对复杂,需要考虑对象的层次结构和组合关系。
2.理解难度增加:对于不熟悉该模式的开发者来说,理解和使用可能会有一定难度。
3.灵活性受限:由于组合模式的实现方式较为固定,可能会限制一些特殊的需求。
4.性能影响:在处理大型树状结构时,可能会导致性能问题。

应用场景如下:
文件和目录管理 :如文件系统中的文件和文件夹。
组织结构 :例如公司的部门和员工层次结构。
图形界面 :窗口、控件等的组合。
树状数据结构:如二叉树等。

示例Component 是抽象组件接口,定义了组合模式需要的操作。Leaf 是叶子对象,它实现了 Component 接口。Composite 是组合对象,它也实现了 Component 接口,并管理一组子组件。Client 类展示了如何使用组合模式,它创建了一个组合对象和一个叶子对象,并将叶子对象添加到组合对象中。客户端可以统一调用 operation() 方法,无论是对单个叶子对象还是组合对象

java 复制代码
// 抽象组件接口
public interface Component {
    void operation();
}
// 叶子对象
public class Leaf implements Component{
    @Override
    public void operation() {
        System.out.println("Leaf is performing operation.");
    }
}
// 组合对象
public class Composite implements Component{
    private List<Component> children = new ArrayList<>();

    public void add(Component component){
        children.add(component);
    }

    public void remove(Component component){
        children.remove(component);
    }

    @Override
    public void operation() {
        for (Component child : children) {
            child.operation();
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Component leaf1= new Leaf();
        Component leaf2=new Leaf();
        Composite composite = new Composite();

        composite.add(leaf1);
        composite.add(leaf2);
        composite.remove(leaf1);

        // 统一处理
        composite.operation();
    }
}
相关推荐
Michael_lcf19 小时前
Agent设计模式:思考-行动-观察循环的本质与局限
设计模式·agent设计模式·agent设计模式的本质
丰锋ff20 小时前
设计模式学习笔记
笔记·学习·设计模式
米啦啦.21 小时前
设计模式/
观察者模式·单例模式·设计模式·工厂模式
QuZhengRong1 天前
【AI】Agent 全栈进阶|Agent 设计模式
人工智能·学习·设计模式·llm·agent
码匠许师傅1 天前
【设计模式精讲】2. 设计原则基石:SOLID 与几条关键原则
java·设计模式·log4j
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-41-备忘录模式(源码剖析篇)
java·设计模式·备忘录模式·源码分析·serializable·undo log·spring statemachine
yinchnag1 天前
CRTP:奇异递归模板模式在 Go 模块系统中的实现
设计模式·go
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-40-备忘录模式(业务实战篇)
java·设计模式·事务回滚·备忘录模式·状态保存·spring transactional·购物车快照
bryant_meng2 天前
【Codex】Part 19 — Codex Prompt Design Patterns
设计模式·prompt·playbook·结果优先·用证据定义完成
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-38-迭代器模式(业务实战篇)
java·设计模式·迭代器模式·stream·遍历封装·集合通用·分页遍历