定义
组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。
节点
组合模式结构为一颗二叉树,存在三种节点
Component:组合模式结构的根节点
Composite:树枝节点,子节点可以为树枝节点或者叶子节点
Leaf: 叶子节点,没有子节点
模式特点
表示 “部分-整体” 的层次结构,生成 “树叶型” 结构;
树结构,子节点为叶子节点或者树枝和节点。叶子节点没有子节点,树枝节点存放子属性,也为叶子节点或者树枝节点。树枝节点通常为数组结构
一致操作性,树叶对象对外接口保存一致(操作与数据结构一致);
需要保证每个叶子节点的接口一致,才能通过遍历统一调用
自上而下的的请求流向,从树对象传递给叶对象;
调用顶层对象,会自行遍历其下的叶对象执行。
代码实现
interface Compose {
name: string,
add(file: CFile): void,
scan(): void
}
class CFile implements Compose {
name: string
constructor(name: string) {
this.name = name
}
add(file: CFile) {
throw new Error('No')
}
scan() {
console.log(this.name)
}
}
class CFolder implements Compose {
fileList = []
name: string
constructor(name: string) {
this.name = name
}
add(file: CFile) {
this.fileList.push(file)
}
scan() {
for (let file of this.fileList) {
file.scan()
}
}
}
let carFolder = new CFolder('车')
let eCarFolder = new CFolder('电车')
let oCarFoldere = new CFolder('油车')
let car1 = new CFile('特斯拉')
let car2 = new CFile('宝马M4')
eCarFolder.add(car1)
oCarFoldere.add(car2)
carFolder.add(eCarFolder)
carFolder.add(oCarFoldere)
carFolder.scan()
© 版权声明
特别提醒: 内容为用户自行发布,如有侵权,请联系我们管理员删除,邮箱:mail@xieniao.com ,在收到您的邮件后我们会在3个工作日内处理。
相关文章
暂无评论...