组合模式
组合模式概述
组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示"部分-整体"的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。
核心思想
- 将对象组织成树形结构
- 通过统一接口操作单个对象和组合对象
- 递归处理树形结构中的所有节点
代码示例
typescript
//组件接口,定义所有组件<复合对象和叶节点的统一接口>
abstract class Component {
constructor(public name: string) {}
abstract excute(): void;
}
//复合对象类
class Composite implements Component {
private list: Component[] = [];
constructor(public name: string) {}
//提供一个接口将叶子节点添加到符合对象的列表中
public add(instance: Component) {
this.list.push(instance);
}
public show() {
console.log(this.list);
}
public excute(): void {
if (!this.list.length) return;
console.log(this.name);
for (let i = 0, len = this.list.length; i < len; i++) {
const component = this.list[i];
component!.excute();
}
}
}
//叶子节点类
class Leaf implements Component {
constructor(public name: string) {}
public excute(): void {
console.log(`${this.name}收到了`);
}
}
//定义一个公司,是一个复合节点
const companyInstance = new Composite("公司");
//定义一个老板
const boss = new Leaf("boss");
//将老板加入公司
companyInstance.add(boss);
//创建一个售前部门
const sales = new Composite("售前部门");
//创建售前部门的员工
const zhangsan = new Leaf("张三");
const lisi = new Leaf("李四");
sales.add(zhangsan);
sales.add(lisi);
companyInstance.add(sales);
//创建一个售后部门
const afterSalesService = new Composite("售后部门");
//创建售后部门的员工
const wangwu = new Leaf("王五");
const laoliu = new Leaf("老六");
afterSalesService.add(wangwu);
afterSalesService.add(laoliu);
companyInstance.add(afterSalesService);
//调用统一的接口执行相同的操作
companyInstance.excute();