组合模式详解(定义类图及使用实例)

组合模式详解(定义类图及使用实例)-mikechen

组合模式是Java设计模式的一种,属于结构型设计模式,下面我就重点来详解组合模式实现以及使用实例@mikechen

组合模式定义

组合模式是一种设计模式,它允许您将对象组合成树形结构,以表示整体/部分的层次结构。

在组合模式中,所有组合对象都实现相同的接口或抽象类,并且可以包含其他组合对象或叶子对象。

 

组合模式作用

通过使用组合模式,您可以将复杂的层次结构组织成树形结构,并通过统一的方式对其进行操作。

例如:在图形用户界面中,您可以将窗口、标签、按钮等组合成一个层次结构,并通过统一的方式对其进行渲染和事件处理。

 

组合模式类图

组合模式类图,如下图所示:

组合模式详解(定义类图及使用实例)-mikechen

组合模式包含以下角色:

1.抽象组件(Component)

定义组合对象和叶子对象的公共接口,可以包含默认实现。

2.叶子组件(Leaf)

表示树形结构中的叶子节点,实现抽象组件的接口,叶子节点没有子节点。

3.组合组件(Composite)

表示树形结构中的中间节点或根节点,实现抽象组件的接口,并且可以包含其他组合对象或叶子对象。

4.客户端(Client)

使用组合对象和叶子对象的方法,可以递归地遍历整个树形结构,从而对整个树形结构进行操作。

总之,组合模式包含抽象组件、叶子组件、组合组件和客户端四个角色,它们共同协作,实现组合对象和叶子对象的统一处理。

 

组合模式实例

下面是一个使用 Java 实现组合模式的示例,该示例表示了一个组织结构:

// 组合对象接口
interface Component {
  public void operation();
}

// 组合对象
class Composite implements Component {
  private List<Component> components = new ArrayList<>();

  public void add(Component component) {
    components.add(component);
  }

  public void remove(Component component) {
    components.remove(component);
  }

  public void operation() {
    System.out.println("Composite operation");
    for (Component component : components) {
      component.operation();
    }
  }
}

// 叶子对象
class Leaf implements Component {
  public void operation() {
    System.out.println("Leaf operation");
  }
}

public class Main {
  public static void main(String[] args) {
    Composite composite1 = new Composite();
    Composite composite2 = new Composite();
    Leaf leaf1 = new Leaf();
    Leaf leaf2 = new Leaf();

    composite1.add(leaf1);
    composite1.add(composite2);
    composite2.add(leaf2);

    composite1.operation();
  }
}

 

组合模式应用

以下是组合模式的一些应用场景:

文件系统: 文件系统也是一个经典的组合结构,每个目录或文件都可以看作一个节点,可以组成一棵树形结构。

组织机构: 组织机构也是一个典型的树形结构,每个员工或部门都可以看作一个节点,可以通过组合模式来表示组织机构之间的关系。

图形界面中的图形元素: 图形界面中的图形元素(如矩形、圆形、文本框等)可以被组合成复杂的图形,组合模式可以用来表示这些图形元素之间的关系。

以上就是组合模式的详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法