组合模式

title

组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。

在组合模式中,有两种类型的对象:叶子对象和组合对象。叶子对象表示树形结构的最底层,它们不包含任何子对象。而组合对象则包含其他的组合对象和叶子对象,它们也被称为容器对象。组合对象负责将其子对象合并成一个更大的组合对象,同时也可以在任何层次结构中添加或删除子对象。

下面是一个简单的组合模式示例:

// 抽象组件
interface Component {
    void add(Component component);
    void remove(Component component);
    void display();
}

// 叶子组件
class Leaf implements Component {
    private String name;

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

    public void add(Component component) {
        // 叶子节点无法添加子节点
    }

    public void remove(Component component) {
        // 叶子节点无法删除子节点
    }

    public void display() {
        System.out.println("Leaf: " + name);
    }
}

// 容器组件
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 display() {
        for (Component component : components) {
            component.display();
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Component root = new Composite();
        Component node1 = new Composite();
        Component node2 = new Composite();
        Component leaf1 = new Leaf("Leaf 1");
        Component leaf2 = new Leaf("Leaf 2");
        Component leaf3 = new Leaf("Leaf 3");

        node1.add(leaf1);
        node1.add(leaf2);
        node2.add(leaf3);
        root.add(node1);
        root.add(node2);
        root.display();
    }
}

在上面的示例中,Component 是抽象组件,Leaf 是叶子组件,Composite 是容器组件。Composite 类包含了一个 List 类型的成员变量,用于存储它的子节点。客户端代码通过创建不同的叶子和容器组件,并将它们组合在一起来构建一棵树形结构。最后,客户端代码调用根节点的 display 方法,打印出整个树形结构。由于叶子组件和容器组件都实现了 Component 接口,因此客户端代码对单个对象和组合对象的使用具有一致性。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:01

results matching ""

    No results matching ""