GOF 23设计模式之 组合模式(composite)

java-design-patterns:Java 中大多数 GoF 设计模式的工作示例 Java设计模式 以下存储库包含 GoF 设计模式的 Java 实现。 示例取自以下书籍。 概念 src 目录中提供了以下所有经典 Java 设计模式的代码示例。 此外,在整个源代码示例中都提供了 java doc 注释,希望能说明设计模式的实际应用。 虽然这些示例相当抽象,但它们确实提供了一种很好的优雅方式来说明这些设计模式的用例。 生成 javadoc 源代码示例的 javadoc 可以通过克隆存储库或下载源代码并运行 javadoc 命令来生成。 立即下载

组合模式

使用组合模式的场景:

  • 把部分喝整体的瓜你用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象

组合模式核心:

  • 抽象构件(Component)角色:定义了叶子和容器构件的共同点
  • 叶子(Leaf)构件角色:无子节点。
  • 容器(Composite)构件角色:有容器特征,可以包含子节点.

组合模式工作流程分析:

  • 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子。
  • 当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员,并调用执行。其中,使用了递归调用的机制对整个结构进行处理。

使用组合模式,模拟杀毒软件架构设计

  • AbstractFile 类
package com.coderbean.Composite;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Chang on 15/9/29.
 */
public interface AbstractFile {
    void killVirus();
}


class ImageFile implements AbstractFile {

    private String name;

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

    @Override
    public void killVirus() {
        System.out.println("---图像文件,进行查杀");
    }
}


class TextFile implements AbstractFile {

    private String name;

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

    @Override
    public void killVirus() {
        System.out.println("---文本文件,进行查杀");
    }
}

class VideoFile implements AbstractFile {

    private String name;

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

    @Override
    public void killVirus() {
        System.out.println("---视频文件,进行查杀");
    }
}

class Folder implements AbstractFile {
    private String name;
    //定义容器,用来存放本容器下的子节点
    private List<AbstractFile> list = new ArrayList<AbstractFile>();

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

    public void add(AbstractFile file){
        list.add(file);
    }

    public void remove(AbstractFile file){
        list.remove(file);
    }

    public AbstractFile getChild(int index){
        return list.get(index);
    }
    @Override
    public void killVirus() {
        System.out.println("---文件夹:"+name+",进行查杀");

        for(AbstractFile file:list){
            file.killVirus();
        }

    }
}
  • Client 类
package com.coderbean.Composite;

/**
 * Created by Chang on 15/9/29.
 */
public class Client {
    public static void main(String[] args) {
        AbstractFile f2,f3,f4,f5;
        Folder f1 = new Folder("我的收藏");
        f2 = new ImageFile("老高的大头像.jpg");
        f3 = new TextFile("Hello.txt");

        f1.add(f2);
        f1.add(f3);

//        f2.killVirus();

        f1.killVirus();

        Folder f11 = new Folder("电影");
        f4 = new VideoFile("笑傲江湖.avi");
        f5 = new VideoFile("神雕侠侣.mp4");

        f11.add(f4);
        f11.add(f5);

        f11.killVirus();
    }
}

开发中的应用场景:

  • 操作系统中的资源管理器
  • GUI中的容器层次图
  • XML文件解析
  • OA系统中,组织结构的处理
  • Junit单元测试框架
    • 底层设计就是典型的组合模式,TestCase(叶子)、TestUnite(容器)、Test接口(抽象)
Vue3 - 超详细“纯前端“将文件上传到阿里云OSS对象存储,最新阿里云前端直传音频、视频、图片、文件、office文档等任意文件,vue3单个或批量从本地选择文件,秒传到阿里云oss无需后端接口! vue3,阿里云oss存储,前端直传oss,上传图片/office文档/音视频/zip压缩包到阿里云oss,项目中上传文件到阿里云oss详细教程,如何将本地文件上传到阿里云OSS存储,纯前端实现阿里云OSS上传,纯前端直传至阿里OSS对象存储教程,如何解决上传文件到阿里云OSS本地环境调试出现跨域问题,直传阿里云oss跨域报错解决,前端直接上传文件到oss服务端,不经过后端直传,浏览器直接上传文件,阿里云oss上传sdk官方文档,阿里云错误,解决这个问题,上传很慢,一直签名失败,权限,不经过后端,纯前端直传 阅读详情

相关推荐

3D识别建模 — 基于ReconstructMe和EAGLE EYES SCANNER的实现

3D实体识别建模,作为3D打印反向工程的一个重要环节,今天就让我们利用ReconstructMe和EAGLE EYES SCANNER来了解一下。 第一步、软件和硬件准备就绪 ReconstructMe下载并安装 http://reconstructme.net/?wpdmdl=160 EAGLE EYES SCANNER直接将相应USB插入电脑接口即OK,之后在    中点击搜索“设备管理...

qq_40013290的博客 881

GOF设计模式——Composite模式

一、什么是Composite模式?         Composite模式,可以借助计算机文件夹的例子去理解,一个文件夹里面可以存放文件,也可以存放子文件夹,这样子形成一种结构,这个“文件夹”就类似于一个容器,而且还是一种具有递归结构的容器。我们可以用Composite模式创造出这样的结构,使得容器和内容具有一致性。 二、Composite模式的原理 Client:使用Composite...

weixin_39400271的博客 321

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 354

结构型模式之组合模式(杀毒软件)

题目:使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以读某个制定的文件(File)进行杀毒,文件类型可以文本文件TextFile、图片文件ImageFile或视频文件VideoFile,请绘制其类图并编程实现。 类图: 代码部分: AbstractFile类: package AbstractFile; /**抽象文件类:抽象构件*/ abstract class AbstractFile { public abstract void add

Cici$的博客 3391

QGIS v3.28 高效加载OSM在线地图的三种实用方法

本文详细介绍了在QGIS v3.28中高效加载OSM在线地图的三种实用方法:通过XYZ Tiles直接连接、使用QuickMapServices插件以及配置WMS/WTMS服务。针对每种方法提供了具体操作步骤、常见问题解决方案和性能优化建议,帮助用户根据需求选择最适合的方案,提升GIS工作效率。

weixin_29233333的博客 433

HDMI 2.1超高清传输背后的“隐形功臣”:深入浅出图解VESA DSC压缩核心流程

本文深入解析HDMI 2.1超高清传输中的VESA DSC压缩技术,揭示其如何在不损失画质的前提下实现带宽减半。通过切片并行处理和智能算法,DSC技术有效解决了8K/4K高帧率视频的传输瓶颈,成为现代显示设备不可或缺的“隐形功臣”。

weixin_30615767的博客 423

复习:GoF的23种设计模式之Composite模式(结构型)

Composite模式(合成、混合) Composite模式例子 这个模式和我们的文件系统类似,我们将文件夹当作容器,单一文件当作内容,文件夹中可以迭代放入文件夹,文件夹可以放入内容。 Composite模式:能够使容器与内容具有一致性,创造出递归结构。 示例代码: public class CompositeTest { public static void main(S...

yingqi的博客 319

什么是华为OD?怎么才能通过华为OD机试?华为OD机试怎么刷题?(2024最新华为OD机试E卷更新中)

华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 11万+

杀毒软件(设计模式--组合模式)

实例要求:使用组合模式设计一个杀毒软件框架,该软件既可以对某个文件夹杀毒,也可以对某个指定的文件杀毒,文件种类包括文本文件、图片文件、视频文件。 实现截图: 先上UML图: ImageFile.java (VideoFile合并到I...

岛岛咕 5190

把 SAP 配置当成一张地图:用 IMG 把实施、变更与治理串成一条清晰的路

摘要 SAP IMG(Implementation Guide)是SAP实施的核心导航体系,它将客户需求转化为系统配置,提供结构化路径和文档化支持。IMG不是简单的菜单树,而是包含业务落地路径、标准化配置活动和文档化知识的实施语言。通过三种视图(Reference、Enterprise、Project)解决不同管理问题,其中Project IMG尤其重要,可管理项目范围、分工和进度。实际工作中应通过SPRO事务码访问IMG,将探索与执行分开管理。案例显示,跨国企业通过Project IMG可有效控制组织架构

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 228

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3825

【软件设计模式】组合模式应用

使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。AbstractFile接口 TextFile类 ImageFile类 VideoFile类 Folder类 Client客户端 运行结果:......

技术改变世界 2268

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java GoF 23种设计模式-结构型模式-组合模式(Composite Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 二、模式动机 三、模式结构 四、代码实现 角色 类 Target:目标抽象类 Calculator.java Adaptee:适配者类 CalculatorAdaptee.java Adapter:适配器类 CalculatorAdapter.java Client:客户类 Client.java ...

WU4566285的博客 489

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GOF23设计模式之组合模式-Composite

享元模式-Flyweight Pattern简单介绍组合模式-Composite概述coding 本文简单介绍组合模式 组合模式-Composite 概述 定义:将对象组合成树形结构以表示 “部分-整体”的层次结构。 Composite使得客户对单个对象和复合对象的使用具有一致性 主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您

zhengyong14350的博客 222

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

GOF23设计模式-结构型模式4-组合模式(Composite)

GOF23设计模式-组合模式:对部分-整体进行一致操作,常用于树形结构

Tumbler 465

GOF23设计模式之组合模式(composite)

一、组合模式概述   将对象组合成树状结构以表示“部分和整体”层次结构,使得客户可以统一的调用叶子对象和容器对象。   (1)组合模式的使用场景      把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。   (2)组合模式核心      抽象构件(Component)角色:定义了叶子和容器构件的共同点      叶子(Leaf...

dcpvpf6917的博客 217

GoF 23个经典的设计模式8--结构模式之 Composite组合模式(未完代续)

 Composite组合模式:将对象以树的结构组合到一个总的层次中。组合模式让客户端以统一的格式应用独立的对象和组合体。Compose objects into tree structures to represent whole-part hierarchies. Composite lets clients treat individual objects and compositions

benewu的专栏 1048

结构型设计模式总结

从代码的角度看Adapter适配器模式和Proxy代理模式有些类似,Adapter适配器模式是解决现有对象在新的环境中的不足,而Proxy代理模式是解决直接访问对象时出现的问题,这两种模式从使用角度看都是解决直接访问对象时出现的问题,只是含义不十分相同。 结构型设计模式是从程序的结构上解决模块之间的耦合问题(好像是句废话),GoF23种设计模式中结构型设计模式有7种,分别是:Adapter适配

zhongjie的专栏 647

结构型设计模式

 结构型设计模式是从程序的结构上解决模块之间的耦合问题(好像是句废话),GoF23种设计模式中结构型设计模式有7种,分别是:Adapter适配器模式、Bridge桥接模式、Composite组合模式、Decorator装饰模式、Facade外观模式、Flyweight享元模式和Proxy代理模式。下面分别总结一下这几种模式:设计模式 GoF的描述 我的理解 Adapter适配器模式 将一个类的

zhongjie的专栏 647

结构型模式总结

                       结构型模式总结 GoF23种设计模式中结构型设计模式有7种,分别是: Adapter适配器模式、 Bridge桥接模式、 Composite组合模式、 Decorator装饰模式、 Facade外观模式、 Flyweight享元模式 和 Proxy代理模式。 设计模式 GoF的描述 理解 ...

jangta的专栏 141

设计模式总结之Composite Pattern(组合模式)

组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

cooldragon的专栏 6607

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

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

谦与谦寻的神隐 1166

设计模式之GOF23组合模式

组合模式Composite 使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹) 组合模式核心: -抽象构件(Component)角色:定义了叶子和容器的共同点 -叶子...

qq_44711190的博客 189

分与合:重新读懂 GoF 23 种设计模式

本文从"分与合"的视角重新解读GoF 23种设计模式。软件设计中,"分"用于解耦和隔离变化,"合"旨在统一入口和复用资源。设计模式可分为三类:11个"分"模式(如Bridge分离抽象与实现、Strategy分派算法),7个"合"模式(如Singleton归并实例、Facade统一接口),以及5个"分合一体"模式(如Composite同时实现分解与组合)。这种分类方式揭示了设计模式的本质思想:在适当层面进行分离或组合,以平衡灵活性与复杂性。文章通过清晰图表和典型示例,展示了每种模式如何体现分合原则。

d3y1`5 81_09 618

【C#设计模式】9.组合模式(Composite Pattern)【结构型】

1.1 动机(Motivate) 客户代码过多地依赖于对象容器(对象容器是对象的容器,细细品味)复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等方面的弊端。如何将“客户代码与复杂的对象容器结构”解耦?如何让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器? 1.2 意图(Intent) 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一..

星Yeah 的博客 2970
上一篇: GOF 23设计模式之 桥接模式
下一篇: GOF 23设计模式之 装饰模式(Decorator)
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值