本文内容可以直达下载ppt详细版本:

面向对象建模技术——17种设计模式的详细介绍-行业报告文档类资源-CSDN下载

或选择各种知识的综合大礼包:

面向对象建模技术+UML+各种模型图+统一建模语言+17种设计模式的ppt-行业报告文档类资源-CSDN下载


目录

一. 组合模式动机

二. 组合模式定义

三. 组合模式结构

四. 模式分析

4.1 文件系统组合模式结构图:

4.2 典型的抽象构件角色代码:

4.3 典型的叶子构件角色代码:

4.4 典型的容器构件角色代码:

五. 组合模式实例与解析

5.1 实例一:水果盘

5.2 实例二:文件浏览

六. 组合模式的优缺点

6.1 组合模式的优点

6.2 组合模式的缺点

七. 模式适用环境

八. 模式应用

8.1 XML文档解析

8.2 操作系统中的目录结构

8.3 JDK的AWT/Swing

九. 模式扩展

9.1 更复杂的组合模式

9.2 透明组合模式

9.3 安全组合模式

十. 设计模式专栏


一. 组合模式动机

  • 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用);
  • 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂;
  • 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式的模式动机;


二. 组合模式定义

  • 组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性;
  • 组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系;

三. 组合模式结构

组合模式包含如下角色

  • Component: 抽象构件;
  • Leaf: 叶子构件;
  • Composite: 容器构件;
  • Client: 客户类;


四. 模式分析

  • 组合模式的关键是定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,而客户端针对该抽象构件类进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理;
  • 同时容器对象与抽象构件类之间还建立一个聚合关联关系,在容器对象中既可以包含叶子,也可以包含容器,以此实现递归组合,形成一个树形结构;

4.1 文件系统组合模式结构图: 

4.2 典型的抽象构件角色代码:

public abstract class Component
{public abstract void add(Component c);public abstract void remove(Component c);public abstract Component getChild(int i);public abstract void operation();
}

4.3 典型的叶子构件角色代码:

public class Leaf extends Component
{public void add(Component c){ //异常处理或错误提示 }    public void remove(Component c){ //异常处理或错误提示 }public Component getChild(int i){ //异常处理或错误提示 }public void operation(){//实现代码}
}

4.4 典型的容器构件角色代码:

public class Composite extends Component
{private ArrayList list = new ArrayList();public void add(Component c){list.add(c);}public void remove(Component c){list.remove(c);}public Component getChild(int i){(Component)list.get(i);}public void operation(){for(Object obj:list){((Component)obj).operation();}}
}

五. 组合模式实例与解析

5.1 实例一:水果盘

在水果盘(Plate)中有一些水果,如苹果(Apple)、香蕉(Banana)、梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘执行“吃”方法,实际上就是吃其中的水果。使用组合模式模拟该场景。


5.2 实例二:文件浏览

文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同 对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无须关心它们的区别。使用组合模式来模拟文件的浏览操作。


六. 组合模式的优缺点 

6.1 组合模式的优点

  • 使设计变得更加抽象,对象的业务规则如果很复杂,则实现组合模式具有很大挑战性,而且不是所有的方法都与叶子对象都有关联;
  • 增加新构件时可能会产生一些问题,很难对容器中的构件类型进行限制;

6.2 组合模式的缺点

  • 使设计变得更加抽象,对象的业务规则如果很复杂,则实现组合模式具有很大挑战性,而且不是所有的方法都与叶子对象都有关联;
  • 增加新构件时可能会产生一些问题,很难对容器中的构件类型进行限制 ;

七. 模式适用环境 

在以下情况下可以使用组合模式:

  • 需要表示一个对象整体或部分层次,在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,可以一致地对待它们;
  • 让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节;
  • 对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理它们;

八. 模式应用 

8.1 XML文档解析

<?xml version="1.0"?><books><book><author>Carson</author><price format="dollar">31.95</price><pubdate>05/01/2001</pubdate></book><pubinfo><publisher>MSPress</publisher><state>WA</state></pubinfo></books>

8.2 操作系统中的目录结构

操作系统中的目录结构是一个树形结构,因此在对文件和文件夹进行操作时可以应用组合模式,例如杀毒软件在查毒或杀毒时,既可以针对一个具体文件,也可以针对一个目录。如果是对目录查毒或杀毒,将递归处理目录中的每一个子目录和文件

8.3 JDK的AWT/Swing

JDK的AWT/Swing是组合模式在Java类库中的一个典型实际应用


九. 模式扩展 

9.1 更复杂的组合模式

9.2 透明组合模式

9.3 安全组合模式


十. 设计模式专栏 

https://blog.csdn.net/weixin_53919192/category_11817835.htmlhttps://blog.csdn.net/weixin_53919192/category_11817835.html

面向对象建模技术之设计模式——组合模式相关推荐

  1. 面向对象建模技术之设计模式——装饰​​​​​​​模式

    本文内容可以直达下载ppt详细版本: 面向对象建模技术--17种设计模式的详细介绍-行业报告文档类资源-CSDN下载 或选择各种知识的综合大礼包: 面向对象建模技术+UML+各种模型图+统一建模语言+ ...

  2. 设计模式---组合模式

    设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...

  3. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

  4. JS设计模式--组合模式

    JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...

  5. 设计模式 | 组合模式及典型应用

    本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用 java.awt中的组合模式 Java集合中的组合模式 Mybatis SqlNode中的组合模式 组合模式 树形结构不 ...

  6. [Head First设计模式]生活中学设计模式——组合模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  7. 设计模式——组合模式(部分整体模式)

    开始介绍之前,先分析一个实例: 编写一个程序展示一个学校院系结构,需要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系:如下: ------**大学**-------- ---- ...

  8. C++设计模式——组合模式(composite pattern)

    一.原理讲解 1.1意图 将对象组合成树形结构以表示"部分 - 整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 1.2应用场景 你想表示对象的部 ...

  9. 设计模式----组合模式UML和实现代码

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是组合模式? 组合模式(Composite)定义:将对象组合成树形结构以表示'部分---整体'的层次结构.组合模式使得 ...

最新文章

  1. #Ruby# Introspect (2)
  2. 【Android基础】动画
  3. 通过访问列表实现MAC地址绑定,实现包过滤
  4. [jillzhang]ExtJs与WCF交互:生成树 --数据库版补充
  5. SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (一)...
  6. 【转】最牛B的编码套路
  7. 位姿估计的来龙去脉——内外参,三维重建,Pnp问题
  8. oracle不要重复记录,Oracle中去重复记录 不用distinct
  9. 基于Python的接口自动化测试框架
  10. WebKit编译小结
  11. 定时器应用-页面弹出广告
  12. SQL Server多表同时查询
  13. jmail mysql_教你怎么使用Jmail发送匿名的邮件(不要身份认证)
  14. TCP协议以及TCP的三次握手和四次挥手
  15. Server2008 安装 Zune
  16. SolidWorks二次开发---简单的参数化示例
  17. 用WORD批量制作工作证件
  18. c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园
  19. iOS PJSIP 接入
  20. (转)洗剑炉——一个刚离职运营商员工的心声——别了,你的电信!

热门文章

  1. 蜂鸣器(有源蜂鸣器无源蜂鸣器)
  2. Calendar.HOUR_OF_DAY 和 Calendar.HOUR的区别
  3. 20220304补充
  4. Windows 下统计行数的命令
  5. MySQL慢查询:SHOW TABLE STATUS
  6. 【VS开发】Windows上的音频采集技术
  7. 逻辑回归(对数几率回归)推导及python代码实现
  8. SVN包含非法文件系统格式选项/包含非法文件系统格式选项
  9. D3D学习笔记之十---模型的载入。
  10. JT-VUE课堂DEMO