北京微信网站建设报价单,seo搜索优化工具,php网站优点,网络服务商的责任规范软件设计模式#xff08;Design pattern#xff09;#xff0c;又称设计模式#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接… 软件设计模式Design pattern又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接【玩转23种Java设计模式】学习目录汇总整理 文章目录 一、简介二、实例1、抽象组件2、叶子节点文件3、组合节点文件夹4、客户端使用 三、总结1、优点2、缺点3、应用场景 一、简介 组合模式Composite Pattern是一种结构型设计模式用于将对象组合成树形结构以表示部分-整体的层次关系。其核心思想是通过统一接口处理叶子对象单个元素和组合对象容器元素使客户端无需区分操作的是单个对象还是整个组合结构。
核心角色
Component声明组合对象的通用接口Leaf叶子节点无子节点Composite容器节点包含子组件集合
二、实例
假设需要构建文件系统包含文件夹组合对象和文件叶子对象。
1、抽象组件
interface FileSystemComponent {void display(int indent);long getSize();
}2、叶子节点文件
class File implements FileSystemComponent {private String name;private long size;public File(String name, long size) {this.name name;this.size size;}Overridepublic void display(int indent) {System.out.println( .repeat(indent) name ( size KB));}Overridepublic long getSize() { return size; }
}3、组合节点文件夹
class Directory implements FileSystemComponent {private String name;private ListFileSystemComponent children new ArrayList();public Directory(String name) {this.name name;}public void add(FileSystemComponent component) {children.add(component);}Overridepublic void display(int indent) {System.out.println( .repeat(indent) name);children.forEach(child - child.display(indent 2));}Overridepublic long getSize() {return children.stream().mapToLong(FileSystemComponent::getSize).sum();}
}4、客户端使用
public class Demo {public static void main(String[] args) {Directory root new Directory(Root);Directory documents new Directory(Documents);documents.add(new File(resume.pdf, 256));documents.add(new File(notes.txt, 128));Directory images new Directory(Images);images.add(new File(photo1.jpg, 2048));root.add(documents);root.add(images);root.display(0);System.out.println(Total size: root.getSize() KB);}
}输出示例 Root Documents resume.pdf (256KB) notes.txt (128KB) Images photo1.jpg (2048KB) Total size: 2432KB
三、总结
1、优点
简化客户端代码统一处理单个对象与组合结构。高扩展性新增组件类型无需修改现有代码。天然支持递归结构方便实现树形操作如遍历、统计。
2、缺点
类型安全性问题需要运行时类型检查。接口设计难度需兼顾叶子与容器的不同需求。可能违反接口隔离原则需要为不需要的方法提供空实现。
3、应用场景
GUI组件库窗口包含面板/按钮等。组织架构管理系统部门包含员工/子部门。数学表达式解析操作符包含子表达式。游戏场景图父节点包含子节点。XML/JSON文档处理。 当系统需要处理树形结构且希望以统一方式操作层次中的不同元素时组合模式是最佳选择。其价值在于模糊了简单元素与复杂元素的边界让复杂的层次结构变得易于管理和扩展。