首页 > 其他分享 >设计模式——组合模式

设计模式——组合模式

时间:2024-01-22 18:25:15浏览次数:22  
标签:CFile name 组合 模式 add let new 设计模式 节点

定义

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

节点

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

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

模式特点

  1. 表示 “部分-整体” 的层次结构,生成 "树叶型" 结构;
    • 树结构,子节点为叶子节点或者树枝和节点。叶子节点没有子节点,树枝节点存放子属性,也为叶子节点或者树枝节点。树枝节点通常为数组结构
  2. 一致操作性,树叶对象对外接口保存一致(操作与数据结构一致);
    • 需要保证每个叶子节点的接口一致,才能通过遍历统一调用
  3. 自上而下的的请求流向,从树对象传递给叶对象;
  4. 调用顶层对象,会自行遍历其下的叶对象执行。

 代码实现

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()

 

标签:CFile,name,组合,模式,add,let,new,设计模式,节点
From: https://www.cnblogs.com/karle/p/17980686

相关文章

  • 代码随想录 day27 组合总和 组合总和 II 分割回文串
    组合总和其实总的思路和前面几类组合问题区别不大本题由于说明了元素可以重复选取且无需考虑sum为0的情况只需要把边界的startIndex迭代从i+1变成i即可i表示可以选取元素本身很容易写出以下未进行剪枝的代码剪枝情况只是多了一种也就是sum+下一个候选元素>targ......
  • 【Python进阶】Python设计模式
    设计模式介绍什么是设计模式设计模式是面对各种问题进行提炼和抽象而形成的解决方案。这些设计方案是前人不断试验,考虑了封装性、复用性、效率、可修改、可移植等各种因素的高度总结。它不限于一种特定的语言,它是一种解决问题的思想和方法为什么要用设计模式按照设计模式编写......
  • 观察者模式
    C#设计模式】16.观察者模式(ObserverPattern)【行为型】介绍  “观察者模式”在现实生活中,实例其实是很多的,比如:八九十年代我们订阅的报纸,我们会定期收到报纸,因为我们订阅了。银行可以给储户发手机短信,也是“观察者模式”很好的使用的例子,因为我们订阅了银行的短信业务,当我们账......
  • 模板模式
    定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现补充:模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤类型:行为型适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现各子类中公共的行为被提取出来并集中到一个公共父类......
  • 设计模式(二十二)模板方法
    一、定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的特定步骤。模板方法是一种类行为型模式二、描述模板方法模式结构比较简单,其核心是抽象类和其中的模板方法的设计,包含以下两个角色:1、AbstractClass(抽......
  • 设计模式
    八大原则:依开单替,接优封针依:依赖倒置原则高层次的代码不应该依赖低层次的代码,应该依赖抽象、抽象的代码不应该依赖具体的代码开:开闭原则对扩展开放,对修改关闭单:单一职责一个类应该仅有一个变化的原因,该变化隐含了它的职责,职责太多会造成混乱替:替换原则子类必须能够替换他......
  • js设计模式之命令模式
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>命令模式</title></head><body><buttonid="btn1">刷新菜单</button><buttonid="btn2">增......
  • keil的调试模式debug
    (1)工程选项,debug这里可以对调试选项进行配置(2)左边的是使用仿真器,右边是默认的在硬件上在线仿真(3)编译一下工程确保没有问题(4)然后点击这里的放大镜里面带各地的图标,进入调试模式(5)主窗口是我们C语言程序,上面的窗口就是C语言翻译成的汇编程序,然后左边这个窗口是寄存器组和状态标志......
  • 懒汉单例模式
    1publicclassSingleInstance{2/**3*懒汉单例模式:当真正需要该对象的时候,才去创建一个对象(延迟加载对象)4*1.定义一个类,把构造器私有5*2.定义一个静态变量存储一个对象6*3.提供一个返回单例对象的方法7*/8//......
  • Seata 2.x 首个版本正式发布,支持 Raft 集群模式
    作者:Seata社区用户登记欢迎已使用用户在此链接登记,便于我们更好的针对业务场景优化:https://github.com/seata/seata/issues/12462.x Roadmap发布概览2.0.0中对大家期待已久的Raft集群模式做了支持,Raft集群模式消除了对第三方注册中心和Seata-Server后端存储的依赖,......