「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。
1.组合模式的简介
组合模式(Composite Pattern):也称部分与整体模式,抽取一组相似对象的共同点(作为一个基类对象,使得它们去继承),并把它们当作这个基类对象处理,组合成一个类似树形结构的,具有层次关系的“整体-部分”组合,它是一种结构型设计模式。
组合模式在常见的树型结构的问题中,可以使我们像处理简单元素的方式去处理复杂元素,使用户对单个元素的访问与复杂元素的访问有一致性,更加简洁高效的方式管理这些元素。
通俗来讲,有点类似于我们开发后台管理系统中的多级菜单,或者多级组织架构,经常就会用到组合模式, 后续我们举例,就用“学校-学院-专业”三级结构来举例
2.组合模式UML类图
- OrganizationComponent:他们抽取出来的共同点,作为基类,这里主要有三个方法,添加,移除,以及打印这三个方法
- University:大学,OrganizationComponent的实现类,有一个List属性,大学管理的下级是 College
- College: 学院,OrganizationComponent的实现类,有一个List属性,学院的下级是 Major
- Major: 专业,OrganizationComponent的实现类,有一个List属性,这里我就把它当作叶子节点了(大家如果需要,可以接着往下组合)
3.代码举例
1.共同点:OrganizationComponent类
- University:大学
- College: 学院
- Major: 专业
- 演示代码
6.结果
4.应用案例
jdk中HashMap中就使用了这种设计模式
- Map:抽象的构件,即共同点,类似于前面说的 OrganizationComponent类
- AbstractHashMap,中间构件(非必须),这里
- HashMap:具体构件,重写了put(),putAll()等方法,提供了统一的管理方式。
- Node: HashMap的内部类,类似于上面的叶子节点 Major