设计模式——组合模式

随笔2个月前发布 韩风龙
29 0 0

定义

组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。

节点

组合模式结构为一颗二叉树,存在三种节点

Component:组合模式结构的根节点
Composite:树枝节点,子节点可以为树枝节点或者叶子节点
Leaf: 叶子节点,没有子节点

模式特点

表示 “部分-整体” 的层次结构,生成 “树叶型” 结构;

树结构,子节点为叶子节点或者树枝和节点。叶子节点没有子节点,树枝节点存放子属性,也为叶子节点或者树枝节点。树枝节点通常为数组结构

一致操作性,树叶对象对外接口保存一致(操作与数据结构一致);

需要保证每个叶子节点的接口一致,才能通过遍历统一调用

自上而下的的请求流向,从树对象传递给叶对象;
调用顶层对象,会自行遍历其下的叶对象执行。

设计模式——组合模式

 代码实现

interface Compose {
    name: string,
    add(file: CFile): void,
    scan(): void
}
class CFile implements Compose {
    name: string
    constructor(name: string) {
        this.name = name
    }
    add(file: CFile) {
        throw new Error('No')
    }
    scan() {
        console.log(this.name)
    }
}
class CFolder implements Compose {
    fileList = []
    name: string
    constructor(name: string) {
        this.name = name
    }
    add(file: CFile) {
        this.fileList.push(file)
    }
    scan() {
        for (let file of this.fileList) {
            file.scan()
        }
    }
}
let carFolder = new CFolder('车')
let eCarFolder = new CFolder('电车')
let oCarFoldere = new CFolder('油车')
let car1 = new CFile('特斯拉')
let car2 = new CFile('宝马M4')
eCarFolder.add(car1)
oCarFoldere.add(car2)
carFolder.add(eCarFolder)
carFolder.add(oCarFoldere)
carFolder.scan()

 

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...