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

js设计模式-组合模式

作者: hzl的学习小记 | 来源:发表于2019-08-13 16:48 被阅读0次

    组合模式
    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。


    特征

    • 层层嵌套的树状结构,整体由复合物-叶子两类元素组成。
    • 复合物和叶子有相同的接口,不同的实现
    //composite
    class Container {
      constructor(id) {
        this.children = []
        this.element = document.createElement('div')
        this.element.id = id
        this.element.style.border = '1px solid black'
        this.element.style.margin = '10px'
        this.element.classList.add('container')    
      }
    
      add(child) {
        this.children.push(child)
        this.element.appendChild(child.getElement())
      }
    
    
      hide() {
        this.children.forEach(node => node.hide())
        this.element.style.display = 'none'
      }
    
      show() {
        this.children.forEach(node => node.show())
        this.element.style.display = ''
      }
    
      getElement() {
        return this.element
      }
    
    }
    // leaf
    class Text {
      constructor(text) {
        this.element = document.createElement('p')
        this.element.innerText = text
      }
    
      add() {}
    
      hide() {
        this.element.style.display = 'none'
      }
    
      show() {
        this.element.style.display = ''
      }
    
      getElement() {
        return this.element
      }
    }
    
    // 建立 header 节点
    let header = new Container('header')
    
    // 建立两个叶节点
    header.add(new Text('标题'))
    header.add(new Text('logo'))
    
    let main = new Container('main')
    main.add(new Text('这是内容1'))
    main.add(new Text('这是内容2'))
    
    let page = new Container('page')
    page.add(header)
    page.add(main)
    page.show()
    
    document.body.appendChild(page.getElement())
    
    image.png

    相关文章

      网友评论

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

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