js设计模式-组合模式
【js设计模式-组合模式】组合模式
组合模式(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
推荐阅读
- 21天|21天|羊多多组合《书都不会读,你还想成功》
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 设计模式-代理模式-Proxy
- 2018-08-29|2018-08-29 - 草稿 - 草稿
- 【译】Rails|【译】Rails 5.0正式发布(Action Cable,API模式等)
- java静态代理模式
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- Kotlin基础(10)-代理模式在kotlin中的使用
- 长谈的确是这个时代需要的一种模式
- 《读_Head_First_有感》_“命令模式”