定义:将对象组合成树形结构以表示“部分-整体”的层次结构 类比:文件系统中的文件和文件夹。文件夹里可以有文件也可以有其他文件夹,但无论是文件还是文件夹都可以进行相同的操作,比如打开、删除等 应用场景 需要表示对象的部分-整体层次结构 希望用户忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时 优缺点 优点 清楚地定义分层的复杂对象 客户端可以一致地使用组合结构和单个对象 缺点 使得设计变得更加复杂,客户端需要处理更多的类 实现代码 // 组件接口 interface Component { operation(): string; } // 叶子组件 class Leaf implements Component { public operation(): string { return 'Leaf'; } } // 复合组件 class Composite implements Component { protected children: Component[] = []; public add(component: Component): void { this.children.push(component); } public remove(component: Component): void { const componentIndex = this.children.indexOf(component); this.children.splice(componentIndex, 1); } public operation(): string { const results = []; for (const child of this.children) { results.push(child.operation()); } return `Branch(${results.join('+')})`; } } // 客户端代码 function clientCode(component: Component) { console.log(`RESULT: ${component.operation()}`); } const simple = new Leaf(); clientCode(simple); const tree = new Composite(); const branch1 = new Composite(); branch1.add(new Leaf()); branch1.add(new Leaf()); const branch2 = new Composite(); branch2.add(new Leaf()); tree.add(branch1); tree.add(branch2); clientCode(tree);