网站空间怎么选,pc营销型网站,多层分销网站建设,福建大舟建设集团有限公司 网站组合模式的典型例子通常涉及到树形结构的处理#xff0c;下面是几个形象且易于理解的例子#xff1a;
文件系统
在文件系统中#xff0c;目录可以包含文件或者其他目录#xff0c;但是从用户的角度来看#xff0c;目录和文件都可以被“打开”或者“获取大小”。这里的目…组合模式的典型例子通常涉及到树形结构的处理下面是几个形象且易于理解的例子
文件系统
在文件系统中目录可以包含文件或者其他目录但是从用户的角度来看目录和文件都可以被“打开”或者“获取大小”。这里的目录就是一个组合对象文件是叶子节点。
interface FileSystemItem {void showProperties();long getSize();
}class File implements FileSystemItem {private String name;private long size;public File(String name, long size) {this.name name;this.size size;}Overridepublic void showProperties() {System.out.println(File: name (Size: size ));}Overridepublic long getSize() {return size;}
}class Directory implements FileSystemItem {private String name;private ListFileSystemItem children new ArrayList();public Directory(String name) {this.name name;}public void add(FileSystemItem item) {children.add(item);}Overridepublic void showProperties() {System.out.println(Directory: name);for (FileSystemItem child : children) {child.showProperties();}}Overridepublic long getSize() {long size 0;for (FileSystemItem child : children) {size child.getSize();}return size;}
}图形界面组件
在图形用户界面GUI中容器组件可以包含其他容器组件或者叶子组件如按钮、文本框等。无论是容器还是叶子组件都可以对它们执行某些操作如绘制、启用/禁用等。
interface GUIComponent {void render();
}class Button implements GUIComponent {Overridepublic void render() {System.out.println(Render Button);}
}class Panel implements GUIComponent {private ListGUIComponent children new ArrayList();public void add(GUIComponent component) {children.add(component);}Overridepublic void render() {System.out.println(Render Panel);for (GUIComponent child : children) {child.render();}}
}组织结构
在组织结构中公司可以分为部门部门下可以有子部门或员工。部门和员工都可以执行某些操作如获取成本。
interface OrganizationComponent {void printStructure();double getCost();
}class Employee implements OrganizationComponent {private String name;private double salary;public Employee(String name, double salary) {this.name name;this.salary salary;}Overridepublic void printStructure() {System.out.println(Employee: name , Salary: salary);}Overridepublic double getCost() {return salary;}
}class Department implements OrganizationComponent {private String name;private ListOrganizationComponent members new ArrayList();public Department(String name) {this.name name;}public void add(OrganizationComponent component) {members.add(component);}Overridepublic void printStructure() {System.out.println(Department: name);for (OrganizationComponent member : members) {member.printStructure();}}Overridepublic double getCost() {double cost 0;for (OrganizationComponent member : members) {cost member.getCost();}return cost;}
}在这些例子中组合模式允许客户端以统一的方式操作单个对象和组合对象这样的设计简化了客户端代码并使得整个结构更加灵活。