结构设计模式 - 组合设计模式 - JAVA
【摘要】 组合设计模式前言这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。作者:神的孩子都在歌唱 一. 介绍由不同的对象组合成一个整体,这种类型的设计模式就叫做组合设计模式。组合模式应用:仅当对象组应表现为单个对象时才应应用组合模式。组合设计模式可用于创建树状结构。组合模式主要包含三种角色:Component:定义系统各层次对象的共有方法和属性,它可以是一个接口或一个抽象...
组合设计模式
前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱
一. 介绍
由不同的对象组合成一个整体,这种类型的设计模式就叫做组合设计模式。
组合模式应用:
- 仅当对象组应表现为单个对象时才应应用组合模式。
- 组合设计模式可用于创建树状结构。
组合模式主要包含三种角色:
- 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{
@Override
public void fillColor(String color) {
System.out.println("给圆形填充了" + color);
}
}
三角形对象
/**
* 三角形
*
* @author chenyunzhi
* @date 2024/3/11 22:56
*/
public class Triangle implements Graph{
@Override
public 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;
}
@Override
public 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
转载说明:务必注明来源,附带本人博客连接。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)