设计模式 - 组合模式
封面图
•
2025-11-09
•
设计模式
0
0
0
0
组合模式(Composite Pattern)是一种**结构型设计模式**,它允许你将对象组合成树形结构来表示“整体-部分”的层次关系。组合模式使得客户端可以统一地处理单个对象和对象组合,而无需关心它们的具体类型。 --- ## 一、组合模式的定义 > **组合模式**:将对象组合成树形结构以表示“整体-部分”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 --- ## 二、组合模式的核心角色 1. **Component(组件)** - 定义所有节点(叶子节点和组合节点)的公共接口。 - 可以是抽象类或接口。 2. **Leaf(叶子节点)** - 不包含子节点的对象。 - 实现 Component 接口中的方法。 3. **Composite(组合节点)** - 包含子节点的对象。 - 实现 Component 接口,并管理子节点的添加、删除等操作。 --- ## 三、组合模式的 UML 类图 ``` +------------------+ | Component | +------------------+ /\ / \ +--------+ +---------+ | Leaf | | Composite | +--------+ +---------+ / \ +--------------+ | Child Node | +--------------+ ``` --- ## 四、组合模式的优点 1. **统一处理**:客户端可以一致地处理单个对象和组合对象。 2. **结构清晰**:适合表示树形结构,如文件系统、菜单、图形界面等。 3. **扩展性强**:新增叶子节点或组合节点时,无需修改现有代码。 --- ## 五、组合模式的缺点 1. **复杂度增加**:对于简单的对象结构,可能会显得过于复杂。 2. **职责划分模糊**:如果组合结构太深,可能难以维护。 --- ## 六、组合模式的应用场景 - 文件系统(目录与文件) - 图形界面(窗口、按钮、容器等) - 菜单系统(主菜单、子菜单) - 企业组织结构(部门、小组、员工) --- ## 七、组合模式的 Java 示例 ```java // 1. 定义组件接口 interface FileSystem { void display(); } // 2. 叶子节点:文件 class File implements FileSystem { private String name; public File(String name) { this.name = name; } @Override public void display() { System.out.println("File: " + name); } } // 3. 组合节点:目录 class Directory implements FileSystem { private String name; private List<FileSystem> children = new ArrayList<>(); public Directory(String name) { this.name = name; } public void add(FileSystem fileSystem) { children.add(fileSystem); } public void remove(FileSystem fileSystem) { children.remove(fileSystem); } @Override public void display() { System.out.println("Directory: " + name); for (FileSystem child : children) { child.display(); } } } // 4. 使用示例 public class Client { public static void main(String[] args) { FileSystem file1 = new File("file1.txt"); FileSystem file2 = new File("file2.txt"); Directory dir1 = new Directory("Documents"); dir1.add(file1); dir1.add(file2); Directory root = new Directory("Root"); root.add(dir1); root.display(); } } ``` --- ## 八、输出结果 ``` Directory: Root Directory: Documents File: file1.txt File: file2.txt ``` --- ## 九、总结 组合模式非常适合需要构建树形结构并希望统一处理每个节点的场景。它通过递归的方式简化了对复杂结构的操作,是实现“整体-部分”关系的经典设计模式之一。 如果你有具体的使用场景或想了解其他设计模式,欢迎继续提问!
上一篇:
设计模式 - 过滤器模式
下一篇:
设计模式 - 装饰器模式
标题录入,一次不能超过6条
留言
评论