结构型模式之组合模式(Composite)

python实现边缘检测Canny算子 (附完整源码) 阅读详情

组合模式可以将一系列有相同接口的对象组合成一个对象对外提供服务,组合后的对象对外提供的服务与组合之前单个对象对外提供的服务接口保持一致,

这使得访问这一系列的对象有了统一的访问门面,这种变化对客户端透明,降低了客户端的访问复杂性,同时这种将多个类似对象组合起来使用的设计模式也使得服务端层次结构更加清晰,易于维护。

组合模式可以轻松地将对一个对象的调用传递到多个对象中执行,具有牵一动百之功效,这种特性使得组合模式多用于树形结构、监听器、过滤器、链式处理等场景。

场景:使用监听器监听事件变化,要求可以灵活地添加多个监听器,而不需要修改事件源的逻辑(开闭原则)。


设计:


示例代码:

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

interface EventListener {
    void doEvent();
}
class EventSource {
    private EventListener eventListener;
    public EventSource(EventListener eventListener) {
        this.eventListener = eventListener;
    }
    public void fireEvent() {
        eventListener.doEvent();
    }
}
class ClickEventListener implements EventListener {
    @Override
    public void doEvent() {
        System.out.println("处理点击事件 ...");
    }
}
class ChangeEventListener implements EventListener {
    @Override
    public void doEvent() {
        System.out.println("处理改变事件 ...");
    }
}
class CompositeListener implements EventListener {//对外表现就是一个普通的EventListener
    private List<EventListener> eventListeners = new ArrayList<>();
    @Override
    public void doEvent() {//这里实现了EventListener接口,表现就像是一个普通的EventListener
        for (EventListener eventListener: eventListeners) {//一起工作
            eventListener.doEvent();
        }
    }
    // 可以方便地添加协同工作者,以组合成强大的工作阵容
    public void addEventListener(EventListener eventListener) {
        eventListeners.add(eventListener);
    }
}
public class Test {
    public static void main(String[] args) {
        ClickEventListener clickEventListener = new ClickEventListener();
        ChangeEventListener changeEventListener = new ChangeEventListener();
        CompositeListener compositeListener = new CompositeListener();
        compositeListener.addEventListener(clickEventListener);//添加协作者
        compositeListener.addEventListener(changeEventListener);//添加协作者
        //EventSource只允许传入一个 监听器,使用组合模式,便可让多个监听器一起工作
        EventSource eventSource = new EventSource(compositeListener);
        eventSource.fireEvent();//触发事件
        System.out.println("=================================");

        // 组合一个组合对象
        CompositeListener others = new CompositeListener();
        others.addEventListener(new EventListener() {
            @Override
            public void doEvent() {
                System.out.println("处理选择事件 ...");
            }
        });
        others.addEventListener(new EventListener() {
            @Override
            public void doEvent() {
                System.out.println("处理其它事件 ...");
            }
        });
        // 组合一个组合对象
        compositeListener.addEventListener(others);
        eventSource.fireEvent();//触发事件
    }
}


程序化广告ADX系统架构设计与实现 摘要: 本文详细介绍了程序化广告交易平台(ADX)的系统架构设计与实现。ADX作为连接广告主与媒体的核心平台,采用基于腾讯云和阿里云的微服务架构,包含网络基础设施、负载均衡、消息处理、核心业务服务和多级数据存储等层次。重点解析了Kafka消息队列处理高并发广告请求、Redis实时统计关键指标等核心技术实现,并提供了Java代码示例展示广告请求处理、竞价流程等核心功能。该系统通过分层设计和分布式组件,实现了高性能、高可用的程序化广告交易能力。 阅读详情

相关推荐

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

Android Composite(ListView)详解

目录:     1.ListView概述     2.ListView使用中的重要角色(Adapter,ViewHolder,数据集,布局)     3.ListView常用属性     4.ListView+ArrayAdapter     5.ListView+SimpleCursorAdapter     6.ListView+SimpleAdapter     7.ListV

Andy_lau 1579

从入门到精通:用友BIP旗舰版全模块实施与运维实战指南

本文详细介绍了用友BIP旗舰版的全模块实施与运维实战指南,涵盖财务云、供应链云、生产制造等核心模块的配置与优化技巧。通过渐进式学习法和实战案例,帮助用户从入门到精通,提升系统实施效率和运维能力,特别适合企业IT人员和实施顾问参考。

weixin_29207533的博客 899

结构型模式 - 组合模式Composite Pattern

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

青衫磊落长歌行的博客 518

用OpenPose进行单个或多个人体姿态估计

在计算机视觉中,人体姿态估计(关键点检测)是一个很常见的问题,在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,本文要使用的检测方法就是基于OpenPose的人体姿态估计方法。 一、OpenPose简介 OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络(CNN)和监督学习(SL)并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿...

weixin_42709563的博客 8404

戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列

【代码】戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列。

路~可以走过 1898

组合模式(Composite Pattern,对象结构型模式)

意图将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使客户端对单个对象和组合对象的使用具有一致性。 对容器和内容一视同仁,建立递归的结构。适用性以下情况使用Composite模式: 1. 你想表示对象的部分—整体层次结构 2. 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象结构参与者Component为组合中的对象声明接口。 在适当的情况下,实现所

sld880311的专栏 863

【Unity】Gif图片播放插件(支持UI及模型纹理渲染两种模式)

unity本身不支持GIF格式文件直接渲染, 因此一般的做法是通过加载图片,通过代码控制其循环播放、停止等,模拟动画效果,本文简单介绍一下某个现有开源工具,感谢开源作者。

灵境引路人 4036

结构型模式:组合模式(Composite Pattern)

一、设计模式的分类 (如果以前看过关于设计模式的分类的话,这部分可以忽略!) 经过很多大神的总结,目前Java中一共23种经典的设计模式! 按照目的,设计模式可以分为以下三种用途: 1.创建型模式:用来处理对象的创建过程 2.结构型模式:用来处理类或者对象的组合 3.行为型模式:用来对类或对象怎样交互和怎样分配职责进行描述 创建型模式用来处理对象的创建

未来,你好! 1038

ZYNQ工业级串口方案:AXI UART 16550扩展RS-485实战(自动方向控制+Linux驱动)

可以轻松扩展出多路工业级串口。但常规方案需要手动控制收发方向(DE/RE引脚),存在实时性差、CPU占用高等痛点。本文从硬件逻辑设计到Linux驱动开发,完整实现了ZYNQ平台的RS-485工业通信方案。,解决了传统方案实时性差的痛点。所有代码均经过实际项目验证,可直接用于生产环境。:尝试将此设计扩展为多协议兼容接口(支持RS-422/RS-232切换)!等特性,依然是现场总线通信的首选。,通过硬件逻辑+Linux驱动协同设计,实现零延迟切换。在工业自动化、能源电力等场景中,RS-485凭借。

QQ_778132974的博客 830

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

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

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

星Yeah 的博客 2971

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【c++设计模式11】结构型3:组合模式(Composite Pattern)

组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组合成树状结构来表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性,可以一致地处理组合对象和叶子对象。

junxuezheng的博客 1327

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

结构型-组合模式(Composite Pattern)

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

babstyt的博客 618

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

结构型模式——组合模式(Composite Pattern)

从简单的组合模式代码入手,再到介绍。 最后分析在JDK中的Map的应用。

qq_46658171的博客 326

设计模式 ~ 结构型模式 ~ 组合模式 ~ Composite Pattern。

设计模式 ~ 结构型模式 ~ 组合模式 ~ Composite Pattern。

lyfGeek的博客 229

设计模式 结构型 组合模式(Composite Pattern)与 常见技术框架应用 解析

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。通过这种模式,客户端可以一致地处理单个对象和对象组合。

JINGWHALE 1487

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

介绍组合模式的含义,组合模式的应用场景,UML图学习,以及C++实现组合模式的实例

bigger_belief的博客 924

C# 设计模式:第九章 - 结构型模式 之 组合模式(Composite Pattern)

在这章中,我们学习了组合模式的基本概念、应用场景、实现方法以及注意事项。组合模式提供了一种将对象组合成树形结构的方式,使得用户对单个对象和组合对象的使用具有一致性。它在表示层次化的数据结构方面有着重要的作用,如文件系统、组织结构、图形界面等。我们通过两个实际的代码示例展示了如何在 C# 中实现组合模式,包括基本的组合模式和文件系统的应用。最后,我们还讨论了一些使用组合模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 1203

【设计模式】结构型模式—组合模式(Composite Pattern)(十)

组合模式(Composite Pattern)也称之为整体-部分(Part-Whole)模式。核心是通过将`单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示`,组合成`树形结构`,使得`单个对象(即叶子对象)`和`组合对象(即容器对象)`的使用具有一致性。 - 它将对象以`树形结构`表示,`最顶层`的节点称为`根节点`,根节点下面可以包含`树枝节点`和`叶子节点`,`树枝节点下面又可以包含树枝节点和叶子节点`

墩墩分墩 484

【设计模式】结构型模式——组合模式(Composite Pattern)

组合模式定义 组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 组合模式为处理树形结构提供了一种较为完美的解决方案,它描述了如何将容器和叶子进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器和叶子。 模

亦轩丶Javer的博客 370

【设计模式】【结构型模式(Structural Patterns)】之组合模式(Composite Pattern)

组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一致性,从而提高了系统的灵活性和可扩展性。

ido1ok的博客 879

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

组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂的元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。

工匠若水 3945

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

组合模式是一种结构型设计模式,它通过树形结构组织对象,使客户端能以统一方式处理单个对象和组合对象。该模式定义抽象组件(Component)作为基类,叶子节点(Leaf)表示末端对象,容器节点(Composite)管理子节点集合。典型应用包括文件系统、组织架构和GUI控件树等层次化场景。组合模式的优点在于简化客户端代码、支持动态扩展,但会增加设计复杂度。实现时需注意透明式(统一接口)与安全式(区分叶子/容器)两种方式的选择。通过抽象与递归机制,该模式有效解耦了客户端与复杂对象结构。

csdn_tom_168的博客 282

结构型模4:组合模式(Composite Pattern)

概述 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模式》] 结构图 图1 Composite模式结构图

u014514671的专栏 419

结构型模式 - 组合模式 (Composite Pattern)

组合模式

HongSH945的博客 356
上一篇: 结构型模式之享元模式(Flyweight)
下一篇: 结构型模式之桥模式(Bridge)
conquer0715
博客等级 码龄18年 73粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值