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

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。

结构图

角色与理解

  • 组合模式共分为三种角色:

    • Component(抽象构件):叶子构件与容器构件共同继承的父类或者是共同实现的接口,该角色中包含所有子类共有方法的声明和实现,在抽象构件中定义了管理子构件的方法,新增构件、删除构件、获取构件。

    • Leaf(叶子构件):表示叶子节点,没有子节点,对于继承父类的管理子节点的方法以抛出异常的方式处理。

    • Composite(容器构件):表示容器节点,包含子节点,子节点可以是容器节点也可以是叶子节点,其提供一个集合来对子节点进行维护,以迭代的方式对子节点进行处理。

  • 组合模式的关键是抽象构件类,它既可以表示叶子节点也可以表示容器节点,对于客户端而言是统一对抽象构件进行处理的,抽象构件类和容器构件类是聚合关联的关系,抽象构件类是容器构件类的一部分,这样容器构件类对子构件进行处理时不用区分是叶子节点还是容器节点,能够统一的做处理

核心代码

  • 抽象组件

  • 容器节点

  • 叶子节点

  • 客户端

- END -

组合模式_设计模式结构性:组合模式(CompositePattern)相关推荐

  1. 组合模式_[设计模式]10.组合模式

    组合模式,也叫"部分整体模式",它把相似的对象组合成树形结构的一个整体.于是,只需一个代表,我们就能继续访问与之相关的同族对象. 模式卡片 模式UML图 七个例子 部门里人很多,大 ...

  2. 抽象工厂模式_设计模式——抽象工厂模式

    阅读目录 使用频率:★★★★★ 一.什么是抽象工厂模式 二.补充说明 三.角色 四.例子 使用频率:★★★★★ 一.什么是抽象工厂模式 就是对一组具有相同主题的工厂进行封装(维基百科解释的很到位): ...

  3. java 肌汉模式_设计模式之原型模式详解(附源代码)

    原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  4. 米线店结账程序 装饰着模式_设计模式——装饰者模式

    <Head First 设计模式> 学习笔记,码云同步更新中 如有错误或不足之处,请一定指出,谢谢~ 目录 查看其它设计模式笔记,点这里→设计模式笔记汇总 装饰者模式 定义: 动态地将责任 ...

  5. python 享元模式_设计模式-创建型模式,python享元模式 、python单例模式(7)

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...

  6. 过滤器用到了java哪个模式_设计模式之过滤器模式——Java语言描述

    过滤器模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来 实现 创建一个Person对象.Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列 ...

  7. java 访问者模式_设计模式之访问者模式

    public interface Visitor { public void visitString(StringElement stringE); public void visitFloat(Fl ...

  8. plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(sin ...

  9. java桥接和装饰_设计模式:桥接模式和装饰模式

    原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...

最新文章

  1. c++禁止进程被结束_多进程任务实现
  2. 如何在hadoop中控制map的个数
  3. BABOK - 企业分析(Enterprise Analysis)概要
  4. mysql 修改字段长度
  5. 互联网做手机 伤国际品牌 救国内品牌
  6. javascript 高级程序设计第三版中文和JavaScript权威指南高清pdf
  7. 2021年高处作业安装拆除维护证考试题库解析
  8. Vbs 脚本编程简明教程之一
  9. 《基本无害的计量经济学》第二章:选择性偏误与随机实验
  10. C# wpf确认取消MessageBox选择按钮
  11. 互联网经典算法面试题-验证二叉搜索树
  12. OpenCV中的模糊处理(python)
  13. HTML,多行文本输入框textarea
  14. 软件测试(六)——缺陷以及总结
  15. 用for循环写520个我喜欢你
  16. 局域网内通信和局域网与局域网间通信
  17. 如何优化网站代码SEO更好?
  18. 学会python还要学什么_学python语言需要配置什么样的电脑
  19. 申报倒计时|武汉东湖高新区促进外资企业投资发展专项资金最后6天
  20. RHCE培训笔记——DNS基础

热门文章

  1. C# list集合 重复元素 索引_C#学习笔记12--集合/索引器/扩展
  2. NTFS权限笔记 2017-12-4
  3. ACdream 1431 Sum vs Product
  4. PHP session值控制
  5. 背景全透明 background: transparent
  6. Tomcat源码学习(7)-How Tomcat works(转)
  7. 奇怪的问题,.Net 2.0发送邮件失败...
  8. 解释一下python中的//,%和**运算符
  9. android应用框架搭建之BaseActivity
  10. C语言之判断是否为闰年