美文网首页
设计模式-组合模式

设计模式-组合模式

作者: 小麻烦爱学习 | 来源:发表于2021-02-27 23:03 被阅读0次

组合模式

组合模式属于结构型设计模式中的一种.
把一组对象组合成树形结构,表示部分和整体的关系.调用者可以使用统一的方式对待组合对象和叶子对象.
组合对象和叶子对象没有继承关系,但是对外有一致的接口,类似于多态特性,避免使用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

相关文章

网友评论

      本文标题:设计模式-组合模式

      本文链接:https://www.haomeiwen.com/subject/hzrwfltx.html