java 设计模式 -- 组合模式

200 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

1.组合模式的简介

组合模式(Composite Pattern):也称部分与整体模式,抽取一组相似对象的共同点(作为一个基类对象,使得它们去继承),并把它们当作这个基类对象处理,组合成一个类似树形结构的,具有层次关系的“整体-部分”组合,它是一种结构型设计模式。

组合模式在常见的树型结构的问题中,可以使我们像处理简单元素的方式去处理复杂元素,使用户对单个元素的访问与复杂元素的访问有一致性,更加简洁高效的方式管理这些元素。

通俗来讲,有点类似于我们开发后台管理系统中的多级菜单,或者多级组织架构,经常就会用到组合模式, 后续我们举例,就用“学校-学院-专业”三级结构来举例

2.组合模式UML类图

image.png

  • OrganizationComponent:他们抽取出来的共同点,作为基类,这里主要有三个方法,添加,移除,以及打印这三个方法
  • University:大学,OrganizationComponent的实现类,有一个List属性,大学管理的下级是 College
  • College: 学院,OrganizationComponent的实现类,有一个List属性,学院的下级是 Major
  • Major: 专业,OrganizationComponent的实现类,有一个List属性,这里我就把它当作叶子节点了(大家如果需要,可以接着往下组合)

3.代码举例

1.共同点:OrganizationComponent类

image.png

  1. University:大学

image.png

  1. College: 学院

image.png

  1. Major: 专业

image.png

  1. 演示代码

image.png

6.结果

image.png

4.应用案例

jdk中HashMap中就使用了这种设计模式

image.png

  1. Map:抽象的构件,即共同点,类似于前面说的 OrganizationComponent类
  2. AbstractHashMap,中间构件(非必须),这里
  3. HashMap:具体构件,重写了put(),putAll()等方法,提供了统一的管理方式。
  4. Node: HashMap的内部类,类似于上面的叶子节点 Major