设计模式--组合模式

2023-07-06 09:31:25 浏览数 (1)

组合模式是一种结构型设计模式,它允许你将对象组合成树状结构来表示整体-部分的层次关系。组合模式使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,单个对象称为叶节点,而组合对象称为容器节点。

使用组合模式可以构建具有层次结构的对象,这些对象可以以相同的方式进行操作。这种模式有助于简化处理复杂对象结构的算法。

下面是一个使用C#编写的组合模式的代码示例:

代码语言:javascript复制
using System;
using System.Collections.Generic;

// 组件类,可以是叶节点或容器节点的基类
abstract class Component
{
    protected string name;

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

    public abstract void Add(Component component);
    public abstract void Remove(Component component);
    public abstract void Display(int depth);
}

// 叶节点类,表示组合中的叶节点对象
class Leaf : Component
{
    public Leaf(string name) : base(name) { }

    public override void Add(Component component)
    {
        Console.WriteLine("Cannot add to a leaf");
    }

    public override void Remove(Component component)
    {
        Console.WriteLine("Cannot remove from a leaf");
    }

    public override void Display(int depth)
    {
        Console.WriteLine(new string('-', depth)   name);
    }
}

// 容器节点类,表示组合中的容器节点对象
class Composite : Component
{
    private List<Component> children = new List<Component>();

    public Composite(string name) : base(name) { }

    public override void Add(Component component)
    {
        children.Add(component);
    }

    public override void Remove(Component component)
    {
        children.Remove(component);
    }

    public override void Display(int depth)
    {
        Console.WriteLine(new string('-', depth)   name);

        foreach (Component component in children)
        {
            component.Display(depth   2);
        }
    }
}

// 客户端代码
class Client
{
    static void Main(string[] args)
    {
        // 创建树状结构
        Composite root = new Composite("Root");
        root.Add(new Leaf("Leaf A"));
        root.Add(new Leaf("Leaf B"));

        Composite composite = new Composite("Composite X");
        composite.Add(new Leaf("Leaf XA"));
        composite.Add(new Leaf("Leaf XB"));

        root.Add(composite);

        Leaf leaf = new Leaf("Leaf C");
        root.Add(leaf);
        root.Remove(leaf);

        // 调用组合对象的方法,执行操作
        root.Display(1);

        Console.ReadLine();
    }
}

运行结果:

组合模式组合模式

在上述代码中,`Component`是组件类,它包含了添加、移除和展示组件的方法。`Leaf`是叶节点类,表示组合中的叶节点对象,而`Composite`是容器节点类,表示组合中的容器节点对象。

在客户端代码中,我们创建了一个树状结构,并对组合对象进行了操作,最后展示整个树形结构。

【小结】

日拱一卒,持续进化,持续迭代。

0 人点赞