组合设计模式
- 一. 介绍
- 二.代码示例
- 2.1 定义Component
- 2.2 定义Leaf
- 2.3 定义Composite
- 三. 参考案例
前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 介绍
由不同的对象组合成一个整体,这种类型的设计模式就叫做组合设计模式。
组合模式应用:
- 仅当对象组应表现为单个对象时才应应用组合模式。
- 组合设计模式可用于创建树状结构。
组合模式主要包含三种角色:
- Component:定义系统各层次对象的共有方法和属性,它可以是一个接口或一个抽象类,可以预先定义一些默认行为和属性。
- Leaf:定义合成中元素的行为。它是组合和实现基本对象的构建块。它没有对其他对象的引用。
- Composite: 它由各个子对象(leaf元素)组成,并在基本组件中实现操作。
比如图表是一种由圆形、三角形等对象组成的结构。当我们为图表填充颜色时,填充的颜色也会作用到图表中的每个对象。图表中的对象都有相同操作,那就是填充颜色。
上面列子中图表就代表是Composite,对象都有的相同操作就是 Component,圆形、三角形 对象就是 leaf
二.代码示例
2.1 定义Component
/*** 图形** @author chenyunzhi* @date 2024/3/11 22:55*/
public interface Graph {/*** 填充颜色* @param color 颜色*/void fillColor(String color);
}
2.2 定义Leaf
圆形对象
/*** 圆形** @author chenyunzhi* @date 2024/3/11 22:58*/
public class Circle implements Graph{@Overridepublic void fillColor(String color) {System.out.println("给圆形填充了" + color);}
}
三角形对象
/*** 三角形** @author chenyunzhi* @date 2024/3/11 22:56*/
public class Triangle implements Graph{@Overridepublic void fillColor(String color) {System.out.println("给三角形填充了" + color);}
}
2.3 定义Composite
/*** 图表** @author chenyunzhi* @date 2024/3/11 23:00*/
public class Diagram implements Graph{private final List<Graph> graphs;public Diagram(List<Graph> graphs) {this.graphs = graphs;}@Overridepublic void fillColor(String color) {for (Graph graph:graphs) {graph.fillColor(color);}}/*** 添加图形*/public void add(Graph graph) {graphs.add(graph);}/*** 删除图形*/public void delete(Graph graph) {graphs.remove(graph);}}
请注意,composite 也实现了组件,其行为与 leaf 类似,只是它可以包含leaf元素组。
三. 参考案例
java.awt.Container#add(Component)
是 Java 中组合模式的一个很好的例子,并且在 Swing 中大量使用。
作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。