GoF设计模式(十一) - 组合模式

设计模式(Gof完整版PDF) PDF高清教程 + 23个模式的源码 + lexi 编辑器源码 很好很强大 立即下载

前言

组合模式(Composite Pattern),将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

 

组合模式主要包含三种角色:

  • 抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性;
  • 树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构;
  • 叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位;

组合方式:

  • 透明模式:把组合(树节点)使用的方法放到统一行为(Component)中,让不同层次(树节点,叶子节点)的结构都具备一致行为
  • 安全模式:统一行为(Component)只规定系统各个层次的最基础的一致行为,而把组合(树节点)本身的方法(管理子类对象的添加,删除等)放到自身当中;

模式实现

 文件抽象节点类

public abstract class AbstractFile {

    String name;

    public AbstractFile(String name){
        this.name = name;
    }

    /**
     * 添加文件
     * @param file 文件
     */
    public abstract void add(AbstractFile file);

    /**
     * 删除文件
     * @param file 文件
     */
    public abstract void remove(AbstractFile file);

    /**
     * 展示
     */
    public abstract void display();

    /**
     * 树形展示
     * @param depth 层级
     */
    public abstract void display(int depth);
}

文件类及文件夹类

public class Folder extends AbstractFile {

    private final List<AbstractFile> files = new ArrayList<>();
    ;

    public Folder(String name) {
        super(name);
    }

    @Override
    public void add(AbstractFile file) {
        this.files.add(file);
    }

    @Override
    public void remove(AbstractFile file) {
        this.files.remove(file);
    }

    @Override
    public void display() {
        for (AbstractFile file : files) {
            file.display();
        }
    }

    @Override
    public void display(int depth) {
        for (int i = 0; i < depth; i++) {
            System.out.print('-');
        }
        System.out.println(name);
        for (AbstractFile file : files) {
            file.display(depth + 1);
        }
    }
}
public class ImageFile extends AbstractFile{

    public ImageFile(String name) {
        super(name);
    }

    @Override
    public void add(AbstractFile file) {
        throw new UnsupportedOperationException("这个是叶子节点,无法增加");
    }

    @Override
    public void remove(AbstractFile file) {
        throw new UnsupportedOperationException("这个是叶子节点,无法删除");
    }

    @Override
    public void display() {
        System.out.println(name);
    }

    @Override
    public void display(int depth) {
        for (int i = 0; i < depth; i++) {
            System.out.print('-');
        }
        System.out.println(name);
    }
}
package com.suiyun.combination.demo;

/**
 * 文本文件
 * @author ww
 */
public class TextFile extends AbstractFile {

    public TextFile(String name) {
        super(name);
    }

    @Override
    public void add(AbstractFile file) {
        throw new UnsupportedOperationException("这个是叶子节点,无法增加");
    }

    @Override
    public void remove(AbstractFile file) {
        throw new UnsupportedOperationException("这个是叶子节点,无法删除");
    }

    @Override
    public void display() {
        System.out.println(name);
    }

    @Override
    public void display(int depth) {
        for (int i = 0; i < depth; i++) {
            System.out.print('-');
        }
        System.out.println(name);
    }
}

测试类

class CombinationApplicationTests {

	@Test
	void contextLoads() {
		//创建顶级文件夹并添加 test.txt,test.png 以及子文件夹
		Folder folder = new Folder("顶级目录文件夹");
		folder.add(new TextFile("test.txt"));
		folder.add(new ImageFile("test.png"));

		Folder subFolder = new Folder("子文件夹");
		subFolder.add(new TextFile("subTest.txt"));
		folder.add(subFolder);

		folder.display(1);
	}

}

 源码

组合模式示例(combination-demo)-Java文档类资源-优快云下载

GOF设计模式中文版 找了很久的GoF设计模式的中文版、有需要的朋友可以下载 立即下载

相关推荐

设计模式精解-GoF 23 种设计模式解析附 C++实现源码.pdf

设计模式精解- GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ..............................................................................................................................................2 0.1 设计模式解析(总序) .....................................................................................................2 0.2 设计模式解析后记.............................................................................................................2 0.3 与作者联系........................................................................................................................5 1 创建型模式...................................................................................................................................5 1.1 Factory模式 ........................................................................................................................5 1.2 AbstactFactory模式 ..........................................................................................................11 1.3 Singleton模式 ...................................................................................................................19 1.4 Builder模式.......................................................................................................................22 1.5 Prototype模式 ...................................................................................................................29 2 结构型模式.................................................................................................................................33 2.1 Bridge模式........................................................................................................................33 2.2 Adapter模式......................................................................................................................39 2.3 Decorator模式...................................................................................................................47 2.4 Composite模式 .................................................................................................................52 2.5 Flyweight模式 ..................................................................................................................58 2.6 Facade模式 .......................................................................................................................64 2.7 Proxy模式 .........................................................................................................................70 3 行为模式.....................................................................................................................................74 3.1 Template模式....................................................................................................................74 3.2 Strategy模式 .....................................................................................................................80 3.3 State模式...........................................................................................................................87 3.4 Observer模式....................................................................................................................94 3.5 Memento模式 .................................................................................................................103 3.6 Mediator模

GoF23种设计模式之结构型模式之组合模式

一、概述 将对象组合成树型结构以表示“部分--整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。 二、适用性 1.你想表示对象的部分--整体层次结构的时候。 2.你希望用户忽略组合对象与单个对象的不同的时候,用户将统一地使用组合结构中的所有对象。 三、参与者 1.Component:为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行...

weixin_30273763的博客 172

Gof 设计模式

[设计模式:可复用面向对象软件的基础],最经典的面向对象设计书籍

GOF设计模式之组合设计模式(结构型模式) ✨ 每日积累

组合模式是什么 组合模式(Composite Pattern),又叫部分整体模式,作为结构型模式,组合模式是用于把一组相似的对象当作一个单一的对象。组合多个对象形成树形结构来表示“整体-部分”的关系层次,它创建了对象组的树形结构。 组合模式能干什么 ​ 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 组合模式优缺点 优点 1、高层模块调用简单:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无

龙飞的博客 7006

分享一个简单的迭代学习机器人双臂控制(MATLAB)

1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。 迭代学习控制的特点是“在重复中学习”,通过反复的迭代修正,达到改善控制效果的目的。迭代学习控制的原理是根据系统前次运行所获得的输出误差信息,在控制过程中不断修正控制输入,随着迭代的进行,逐

weixin_45776027的博客 4483

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

JAVA设计模式之组合模式

组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计模式。 组合模式一般用来描述整体与部分的关系,它将对象组织到树形结构中,顶层的节点被称为根节点,根节点下面可以包含树枝节点和叶子节点,树枝节点下面又可以包含树枝节点和叶子节点,树形结构图如下。 由上图可以看出,其实根节点和树枝节点本质上属于同一种数据类型,可以作为容器使

DAIHUINKZX的博客 476

Silvaco光电探测学习笔记(一)——有关响应和暗电流

习惯用md记笔记,索性发出来,一是为了在线同步,二是希望能帮到需要的人。

qq_41584406的博客 8012

GOF设计模式-组合模式

组合模式:将对象合成树形结果以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 像xml的结构就是组合组合,dom4j解析xml的时候,就是这样的。 Company:是一个抽象接口,实现所有类共有接口的默认行为。 ConcreteCompany: 实现类执行具体的添加节点,删除节点,等操作, FinanceDepartment,HRDepartment:一个具体的

小布的世界 515

从仿真到实机:四足机器人控制算法的全流程验证框架

本文系统阐述了四足机器人从仿真到实机的全流程验证框架。针对仿真与实机环境的巨大差异,文章详细介绍了在MuJoCo等高保真仿真环境中的建模、算法迭代与压力测试方法,并重点解析了通过硬件抽象层和中间件搭建通往实机的关键桥梁。最后,提供了实机部署的安全清单与调试策略,旨在帮助开发者构建可重复、风险可控的算法验证闭环,提升算法在真实世界中的鲁棒性与可靠性。

lilh34434的博客 383

uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,手机移动端h5公众号页面利用微登录拿到用户数据!

uni-app,微信公众号,h5网页,uniapp网页端,手机端H5公众号页面,微信网页登陆,uniApp详细实现公众号的登录,微信授权第三方网站登录,流程及逻辑详细教程,OAuth2.0,公众号网页授权,微信网页授权通过code换取网页授权,redirect_url,参数错误,解决,报错,无法调起,如何申请测试公众号,微信公众平台测试号的申请与使用,获取用户openid手机号昵称头像,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,测试公众号,在开发环境下怎么测试,用项目本地ip地址,微信公众号平

🏆 前端领域优质创作者 5063

五万字详解“GoF”的23种设计模式

大家好,我是栗筝i,近期我总结梳理了 “GoF”的 23 种设计模式,并使用 Java 对每种设计模式都进行了伪代码与 Demo 实现,并总结了每种设计模式的应用场景,优缺点,UML图等相关内容,字/词数达到了5万,希望对大家有所帮助~~

栗筝i的博客 4167

24、无人机能耗模型与上下文质量管理的研究

本文系统介绍了无人机能耗模型与上下文质量管理的研究进展。详细阐述了Dorling、Stolaroff、Kirchstein和Tseng等经典能耗模型的原理及特点,并基于LSTM架构构建了数据驱动的能耗预测模型,实验表明其预测精度显著优于传统模型。此外,还探讨了物联网环境中的上下文质量管理问题,引入了conQeng框架,以提升上下文选择、测量和验证的效率与可靠性。研究为无人机能耗优化和物联网上下文管理提供了理论支持和技术方案。

palm99的专栏 344

玄子Share 设计模式 GOF 全23种 + 七大设计原则

此文主要内容为,面向对象七大设计原则(OOD Principle),GOF(Gang Of Four)23种设计模式,拓展的两个设计模式,简单工厂模式(Simple Factory Pattern),空对象模式(Null Object Pattern),以及工厂模式与策略模式(Factory And Strategy Pattern)之间的区别,两个设计模式较为相似,细节上需要分清,每个设计模式都分为了八步介绍,先对设计模式进行简单介绍,尽量一句话概述,方便记忆,再以现实生活中的场景举例,抛出问题解决问题

qq_62283694的博客 3442

【优化模型】求解混合整数线性规划 MILP 问题

混合整数线性规划(Mixed Integer Linear Programming,MILP)是一类优化问题,其中目标函数和约束条件均为线性,并且包含整数变量。MILP 在实际应用中具有广泛的应用,可以解决很多实际问题,如生产调度、网络设计、资源分配等。f — 系数向量。系数向量,指定为实数向量或实数数组。intcon — 整数约束组成的向量。整数约束组成的向量,指定为正整数向量。intcon 中的值指示决策变量 x 中应取整数值的分量。A — 线性不等式约束。线性不等式约束,指定为实矩阵。

Fanjufei的博客 2497

YOLOv5 实现 10 种热力图可视化方式教程 | GradCAM XGradCAM ScoreCAM LayerCAM HiResCAM EigenCAM......

10 种热力图可视化方法 ,总有一款适合你

Coding... 5568

GoF设计模式-组合模式

组合模式(重要): 结构型模式,又叫整体-部分模式,将叶子对象与容器对象递归组合,使得用户在使用时无须区别,可以一致地使用叶子对象和容器对象。 叶子对象:只能作为普通对象适用 容器对象:既能作为普通对象,又可作为其他对象的容器,提供一个集成存储子节点 组合模式的角色:抽象类或接口(是叶子类和容器类的父类),叶子类,容器类 ...

weixin_42273847的博客 255

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GoF设计模式——组合模式

组合模式(Composite Pattern)是一种结构型设计模式,将对象组织成树状结构,使单个对象和组合对象实现相同接口,实现统一处理。核心思想是: 定义统一接口(Component),包含公共操作和子节点管理方法; 叶子节点(Leaf)实现基础功能,不支持子节点; 组合节点(Composite)持有子节点列表,递归处理操作。 典型应用场景包括文件系统、组织架构等树形结构。通过透明方式实现(子节点管理方法放在接口中),客户端无需区分对象类型。优势在于简化客户端代码,支持递归处理,易于扩展新节点类型。示例展

多低调的博客 413

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java设计模式——GoF设计模式

一、GoF设计模式简介 本节内容参考《Java设计模式》@刘伟 编著,清华大学出版社出版,设计模式详解请参考原书。 1.GoF 的 23 种模式一览表 范围/目的 创建型模式 结构型模式 行为型模式 类模式 工厂方法模式 (类)适配器模式 解释器模式 模板方法模式 对象模式 抽象工厂模式 建造者模式 原型模式 单例模式 (对象)适配器模式 桥接模式 组合模式

weixin_40587145的博客 3273

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

GOF设计模式简介

1.简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可...

yoyoseng的博客 873

Gof23设计模式之组合模式

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

m0_55993923的博客 819

[设计模式-1]23种GOF设计模式及7大原则概述

java 设计模式 原则

心流时间的博客 1421

GOF设计模式(08)组合模式

简介 一、定义 组合(Composite)模式:组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。 组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“部分-整体”(Part-Whole)模式,它是一种对象结构型模式。 二、组件 Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所...

stanwuc的博客 253

设计模式之组合模式

组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole),主要是用来描述部分与整体的关系,其定义如下:我们先来说说组合模式的几个角色:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性,比如我们例子中的getInfo就封装到了抽象类中。·Leaf叶子构件叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。高层模块调用简单一棵树形机构中的所有节点都是Component,局部和整体对调

youxiaxiaomage的博客 1330

设计模式(九)结构型:组合模式详解

组合模式(Composite Pattern)是 GoF 23 种设计模式中的结构型模式之一,其核心价值在于将对象组织成树形结构以表示“部分-整体”的层次关系,并使得客户端可以统一地处理单个对象和组合对象。

谦与谦寻的神隐 1166

GoF的23种设计模式

一、设计模式的分类 1.根据模式的目的:即模式是用来完成什么工作的,这种方式分为创建型模式、结构型模式和行为型模式。 (1)创建型模式:用于描述怎么样创建对象,主要特点是:将对象的创建和使用分离,GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 (2)结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 (3)行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的

tangyin_007的博客 1162
上一篇: GoF设计模式(九) - 外观模式
下一篇: GoF设计模式(十二) - 享元模式
让程序飞
博客等级 码龄10年 8831粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让程序飞

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值