深圳有做網(wǎng)站的公司嗎seo 關(guān)鍵詞優(yōu)化
組合模式的典型例子通常涉及到樹形結(jié)構(gòu)的處理,下面是幾個(gè)形象且易于理解的例子:
文件系統(tǒng)
在文件系統(tǒng)中,目錄可以包含文件或者其他目錄,但是從用戶的角度來(lái)看,目錄和文件都可以被“打開”或者“獲取大小”。這里的目錄就是一個(gè)組合對(duì)象,文件是葉子節(jié)點(diǎn)。
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 List<FileSystemItem> 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)中,容器組件可以包含其他容器組件或者葉子組件(如按鈕、文本框等)。無(wú)論是容器還是葉子組件,都可以對(duì)它們執(zhí)行某些操作,如繪制、啟用/禁用等。
interface GUIComponent {void render();
}class Button implements GUIComponent {@Overridepublic void render() {System.out.println("Render Button");}
}class Panel implements GUIComponent {private List<GUIComponent> 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();}}
}
組織結(jié)構(gòu)
在組織結(jié)構(gòu)中,公司可以分為部門,部門下可以有子部門或員工。部門和員工都可以執(zhí)行某些操作,如獲取成本。
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 List<OrganizationComponent> 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;}
}
在這些例子中,組合模式允許客戶端以統(tǒng)一的方式操作單個(gè)對(duì)象和組合對(duì)象,這樣的設(shè)計(jì)簡(jiǎn)化了客戶端代碼,并使得整個(gè)結(jié)構(gòu)更加靈活。