Java组合模式详解(类图实例及应用场景)

Java组合模式详解(类图实例及应用场景)-mikechen

Java组合模式是常用的Java设计模式,下面我重点详解Java组合模式的角色实现与应用场景@mikechen

Java组合模式定义

Java组合模式(Composite Pattern)是一种结构型设计模式,用于组合对象形成树形结构,使得客户端可以像处理单个对象一样处理组合对象和单个对象。

 

Java组合模式角色

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

Java组合模式详解(类图实例及应用场景)-mikechen

Java组合模式通常包含如下角色:

  1. 抽象组件(Component):定义组合对象和叶子对象的公共接口,声明了用于管理子对象的方法。
  2. 叶子组件(Leaf):表示树形结构中的叶子节点,实现了抽象组件的接口。
  3. 组合组件(Composite):表示由多个叶子对象和组合对象组成的子树,实现了抽象组件的接口,通常包含一个子组件列表。

 

Java组合模式应用场景

Java组合模式应用场景如下:

1.表示树形结构

当需要表示对象之间的层次结构,例如:文件系统、部门结构等,可以使用组合模式来构建树形结构。

2.统一处理对象和组合对象

当需要对对象和组合对象进行一致的操作,例如:遍历、搜索、修改等,可以使用组合模式将对象和组合对象看作同一类对象来处理。

3.递归操作对象

当需要对对象进行递归操作,例如:计算对象的总体积、总价格等,可以使用组合模式递归地处理子对象。

4.对象之间具有相似的操作

当多个对象之间具有相似的操作,并且需要对它们进行一致的处理,可以使用组合模式将它们看作同一类对象来处理。

 

Java组合模式实现例子

以下是一个使用Java实现的组合模式的代码示例:

// 抽象组件
interface Component {
    void operation();
}

// 叶子组件
class Leaf implements Component {
    private String name;
    
    public Leaf(String name) {
        this.name = name;
    }
    
    @Override
    public void operation() {
        System.out.println("Leaf " + name + " is processed.");
    }
}

// 组合组件
class Composite implements Component {
    private String name;
    private List<Component> children = new ArrayList<>();
    
    public Composite(String name) {
        this.name = name;
    }
    
    public void add(Component component) {
        children.add(component);
    }
    
    public void remove(Component component) {
        children.remove(component);
    }
    
    @Override
    public void operation() {
        System.out.println("Composite " + name + " is processed.");
        for (Component child : children) {
            child.operation();
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        // 创建组合对象和叶子对象
        Component leaf1 = new Leaf("leaf1");
        Component leaf2 = new Leaf("leaf2");
        Component leaf3 = new Leaf("leaf3");
        Component composite1 = new Composite("composite1");
        Component composite2 = new Composite("composite2");
        // 组合对象包含叶子对象和其他组合对象
        composite1.add(leaf1);
        composite1.add(composite2);
        composite2.add(leaf2);
        composite2.add(leaf3);
        // 客户端通过抽象组件的接口操作组合对象
        composite1.operation();
    }
}

在上述代码中:

  1. 抽象组件 Component 定义了组合对象和叶子对象的公共接口,包含 operation() 方法用于执行操作;
  2. 叶子组件 Leaf 表示组合中的单个对象,实现了 operation() 方法;
  3. 组合组件 Composite 表示组合中的容器对象,包含一个或多个子组件;

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

作者简介

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

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

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

评论交流
    说说你的看法