结构设计模式 - 组合设计模式 - JAVA

举报
神的孩子在歌唱 发表于 2024/03/14 21:56:56 2024/03/14
【摘要】 组合设计模式前言这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。作者:神的孩子都在歌唱 一. 介绍由不同的对象组合成一个整体,这种类型的设计模式就叫做组合设计模式。组合模式应用:仅当对象组应表现为单个对象时才应应用组合模式。组合设计模式可用于创建树状结构。组合模式主要包含三种角色:Component:定义系统各层次对象的共有方法和属性,它可以是一个接口或一个抽象...

组合设计模式

前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱

一. 介绍

由不同的对象组合成一个整体,这种类型的设计模式就叫做组合设计模式。

组合模式应用:

  • 仅当对象组应表现为单个对象时才应应用组合模式。
  • 组合设计模式可用于创建树状结构。

组合模式主要包含三种角色:

  • Component:定义系统各层次对象的共有方法和属性,它可以是一个接口或一个抽象类,可以预先定义一些默认行为和属性。
  • Leaf:定义合成中元素的行为。它是组合和实现基本对象的构建块。它没有对其他对象的引用
  • Composite: 它由各个子对象(leaf元素)组成,并在基本组件中实现操作。

比如图表是一种由圆形、三角形等对象组成的结构。当我们为图表填充颜色时,填充的颜色也会作用到图表中的每个对象。图表中的对象都有相同操作,那就是填充颜色。

上面列子中图表就代表是Composite,对象都有的相同操作就是 Component,圆形、三角形 对象就是 leaf

二.代码示例

image-20240311231910438.png

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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。