java 实现组合模式

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树状结构以表示部分-整体层次结构。组合模式使得客户端可以以一致的方式处理单个对象和组合对象。在组合模式中,有两种重要的角色:叶子节点(Leaf)和容器节点(Composite)。

以下是一个简单的Java示例,演示如何实现组合模式:

首先,定义一个抽象类 Component 表示组合中的所有对象的通用接口:

public abstract class Component {
    
    
    protected String name;

    public Component(String name) {
    
    
        this.name = name;
    }

    public abstract void operation();
}

然后,创建叶子节点类 Leaf,它继承自 Component

public class Leaf extends Component {
    
    
    public Leaf(String name) {
    
    
        super(name);
    }

    @Override
    public void operation() {
    
    
        System.out.println("Leaf " + name + " is performing an operation");
    }
}

接下来,创建容器节点类 Composite,它也继承自 Component,并可以包含其他组件:

import java.util.ArrayList;
import java.util.List;

public class Composite extends Component {
    
    
    private List<Component> children = new ArrayList<>();

    public Composite(String name) {
    
    
        super(name);
    }

    @Override
    public void operation() {
    
    
        System.out.println("Composite " + name + " is performing an operation");
        for (Component child : children) {
    
    
            child.operation();
        }
    }

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

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

现在,我们可以创建一个组合结构,包含叶子节点和容器节点,并通过组合模式来处理它们:

public class CompositePatternDemo {
    
    
    public static void main(String[] args) {
    
    
        Component leaf1 = new Leaf("Leaf 1");
        Component leaf2 = new Leaf("Leaf 2");
        Component leaf3 = new Leaf("Leaf 3");

        Composite composite1 = new Composite("Composite 1");
        composite1.add(leaf1);
        composite1.add(leaf2);

        Composite composite2 = new Composite("Composite 2");
        composite2.add(leaf3);

        Composite root = new Composite("Root");
        root.add(composite1);
        root.add(composite2);

        root.operation();
    }
}

在这个示例中,我们创建了一个包含叶子节点和容器节点的组合结构。通过组合模式,我们可以以一致的方式处理单个叶子节点和复合容器节点。调用 root.operation() 会递归调用每个节点的 operation() 方法,从而实现整个组合结构的操作。

组合模式适用于需要以一致的方式处理单个对象和组合对象的场景,例如文件系统、组织结构等。它使得客户端代码更加灵活,能够递归地处理复杂的对象结构。

猜你喜欢

转载自blog.csdn.net/sunyuhua_keyboard/article/details/132674082