城乡建设官方网站wordpress添加新菜单到导航
2026/4/18 13:58:10 网站建设 项目流程
城乡建设官方网站,wordpress添加新菜单到导航,如何百度搜索到自己的网站,国内做音乐网站什么是组合模式#xff1f;组合模式(Composite Pattern)#xff0c;是一种结构型设计模式#xff0c;这种模式将对象组合成树形结构#xff0c;以表示部分--整体的层次关系#xff0c;组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构角色说明Compo…什么是组合模式组合模式(Composite Pattern)是一种结构型设计模式这种模式将对象组合成树形结构以表示部分--整体的层次关系组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式的结构角色说明Component抽象组件定义叶子和容器的公共接口Leaf叶子节点实现 Component 的具体行为如 FileComposite容器节点持有子组件列表实现 Component 并提供 add/remove 等管理方法如 Folder代码实现-文件系统示例第一步定义抽象组件FileSystemItempublic abstract class FileSystemItem { protected String name; public FileSystemItem(String name) { this.name name; } /** * 显示文件或目录的信息 * param indent 缩进级别用于显示层级结构 */ public abstract void display(int indent); /** * 获取文件或目录的大小 * return 文件或目录的大小字节 */ public abstract long getSize(); // 工具方法生成缩进 protected String getIndent(int level) { return .repeat(level); } }第二步实现叶子节点Filepublic class File extends FileSystemItem { private long size; public File(String name, long size) { super(name); this.size size; } /** * 显示文件或目录的信息 * * param indent 缩进级别用于显示层级结构 */ Override public void display(int indent) { System.out.println(getIndent(indent) name ( size KB)); } /** * 获取文件或目录的大小 * * return 文件或目录的大小字节 */ Override public long getSize() { return size; } }第三步实现容器节点Folderpublic class Folder extends FileSystemItem { private ListFileSystemItem children new ArrayList(); public Folder(String name) { super(name); } /** * 显示文件或目录的信息 * * param indent 缩进级别用于显示层级结构 */ Override public void display(int indent) { System.out.println(getIndent(indent) name); for (FileSystemItem child : children) { child.display(indent 1); // 递归显示子项 } } // 管理子组件的方法仅 Composite 需要 public void add(FileSystemItem item) { children.add(item); } public void remove(FileSystemItem item) { children.remove(item); } public ListFileSystemItem getChildren() { return Collections.unmodifiableList(children); } /** * 获取文件或目录的大小 * * return 文件或目录的大小字节 */ Override public long getSize() { return children.stream() .mapToLong(FileSystemItem::getSize) .sum(); } }第四步客户端使用public class CompositeDemo { public static void main(String[] args) { // 构建树形结构 Folder project new Folder(MyProject); Folder docs new Folder(docs); docs.add(new File(requirements.md, 10)); docs.add(new File(design.png, 500)); Folder src new Folder(src); src.add(new File(Main.java, 20)); src.add(new File(Utils.java, 15)); project.add(docs); project.add(src); project.add(new File(README.md, 5)); // 统一操作无需区分 File 或 Folder project.display(0); System.out.println(\n总大小: project.getSize() KB); } }运行输出两种组合模式变体类型特点优缺点透明式TransparentComponent 接口中声明所有方法包括add,remove客户端完全透明但 Leaf 必须抛出UnsupportedOperationException安全式Safe只在 Composite 中定义管理子节点的方法类型安全但客户端需知道对象是否为 Composite如需调用add我们上面的例子采用的是安全式更符合 Java 的类型安全理念。组合模式的优点✅简化客户端代码统一接口无需判断类型。✅易于扩展新增组件类型不影响现有逻辑。✅天然支持递归操作非常适合树形数据结构。典型应用场景️GUI 组件树Swing/AWT 中的Container和ComponentDOM 树操作HTML 元素的父子结构组织架构公司 → 部门 → 员工游戏对象层级场景 → 角色 → 武器/特效菜单系统主菜单 → 子菜单 → 菜单项总结组合模式通过抽象出统一的行为接口巧妙地将“个体”与“整体”统一处理极大提升了代码的可读性、可维护性和可扩展性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询