组合模式
组合模式属于结构型设计模式中的一种.
把一组对象组合成树形结构,表示部分和整体的关系.调用者可以使用统一的方式对待组合对象和叶子对象.
组合对象和叶子对象没有继承关系,但是对外有一致的接口,类似于多态特性,避免使用if-else.解耦调用者和复杂元素之间的关系
比如:文件夹和文件,文件夹属于组合对象,文件属于叶子对象.
image.png
class Folder {
constructor(name) {
this.name = name;
this.children = [],
this.parent = null;
}
add(child) {
this.children.push(child);
child.parent = this;
}
show() {
console.log(this.name);
this.children.forEach(c => c.show()); //不必关注是Folder还是File的show
}
delete() {
// 先删子节点,最后删自己
this.children.forEach(c => c.delete());
console.log('删除',this.name);
}
}
class File {
constructor(name) {
this.name = name;
this.parent = null;
}
add(child) {
child.parent = this;
}
show() {
console.log(this.name);
}
delete() {
console.log('删除',this.name);
}
}
let root = new Folder('root');
let leve1Folder = new Folder('leve1-Folder');
let leve1File = new File('leve1-File');
let leve2Folder = new Folder('leve2-Folder');
let leve3File = new File('leve3-File');
root.add(leve1File);
root.add(leve1Folder);
leve2Folder.add(leve3File);
leve1Folder.add(leve2Folder);
root.show();
console.log('=========删除===========');
root.delete();
打印结果
root
leve1-File
leve1-Folder
leve2-Folder
leve3-File
=========删除===========
删除 leve1-File
删除 leve3-File
删除 leve2-Folder
删除 leve1-Folder
删除 root
网友评论