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

设计模式-组合模式

作者: 小麻烦爱学习 | 来源:发表于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