其他分享
首页 > 其他分享> > GoF-组合模式(一)

GoF-组合模式(一)

作者:互联网

问题提出

编写程序展示一个学院院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系

传统方案

在这里插入图片描述
按照传统方案我们会选择创建一个学校的实体类或抽象类,让学院类继承学校,让系继承学院类

但是很明显这样是有错误的

传统方案问题分析

1.将学院看作是学校的子类,系看作是学院的子类,实际上是站在组织大小的角度上来进行分层次的,实际情况应该是学校包含学院,学院包含系这样的关系

2.实际上我们的要求是:在页面中能够展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,,在这传统的解决方案,不能够很好的实现管理操作,比如说学院,系的添加,删除,遍历等。用继承的关系去实现管理,是格格不入的

3.解决方案:把学校、院、系都看作是组织结构,它们之间没有继承的关系,而是一个树形结构,就可以很好的实现管理操作。=>组合模式

组合模式基本介绍

1.组合模式又叫部分整体模式,他创建了对象组的树形结构,将对象组合成树状结构以表示”整体-部分“的层次关系
2.组合模式依据树形结构来组合对象,用来表示部分以及整体的层次
3.这种类型的设计模式属于结构型模式
4.组合模式能够让用户对单个对象和组合对象的访问具有一致性,即组合能够让客户以一致性的方式处理个别对象以及组合对象。举例说明:(1)用户在word文档中能够单个的对文字进行字号等的修改,也可以批处理。(2)在硬盘中我们有文件系统,在文件系统中进行删除文件时候,可以单独删除一个只有一个的文件,也可以对一个嵌套了好多层文件的文件夹进行删除。这就是组合模式。

组合模式原理类图

在这里插入图片描述
1.**Component:**这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口

2.**Leaf:**在组合中表示叶子节点,叶子节点没有子节点 (被管理者)

3.**Composite:**非叶子节点,用于存储子部件,在Component接口中实现子部件的相关操作,比如add方法。 (管理者)(补充类图说明:在图中Composite和Component之间是聚合的关系,如同汽车和车轮,发动机的关系,是一种关联,只是这种关联两端的类具有”整体-部分“的关系)

组合模式解决的问题

在这里插入图片描述
root来对他下一层进行操作时,不需要考虑他的下一层是叶子还是节点,它提供的是统一的方法。

标签:组合,对象,GoF,Component,模式,学校,学院
来源: https://blog.csdn.net/SsZzCcAa/article/details/116855237