组合模式(Composite Pattern)

如上图是一个Windows目录结构的截图,我们发现目录里面有文件、文件夹,文件夹下面可以放文件文件夹,但是文件里面不可以放文件和文件夹,这样我们遍历这个目录下所有文件的时候,我们采用递归的方式层层遍历,直到所有文件夹下面的文件都遍历为止。我们这样遍历的时候每次都需要区分是不是文件夹,有些时候客户需要对他们进行一致性的对待,这样我们只有遍历每个节点就行,不需要对其进行区分。

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有整体-部分关系的层次结构,组合模式让客户端可以统一对待单个对象和组合对象

 组合模式的结构

Component(抽象构件):他可以是接口也可以是抽象类,为叶子构件和容器构件对象声明接口,包含子类共有的行为的声明和实现

abstract class Component
{
    public abstract void Operation();

    public abstract void Add(Component c);

    public abstract void Remove(Component c);

    public abstract Component GetChild(int i);
}

Leaf(叶子构件):在组合结构中叶子构件是没有子节点,实现抽象构件的所有方法

class Leaf : Component
{
    public override void Add(Component c)
    {
    }

    public override Component GetChild(int i)
    {
        return null;
    }

    public override void Operation()
    {
    }

    public override void Remove(Component c)
    {
    }
}

Composite(容器构件):容器节点也包含叶子和容器,它提供一个集合用于存储节点,在业务方法中可以递归调用子节点的业务方法

class Composite : Component
{
    private List<Component> list = new List<Component>();

    public override void Add(Component c)
    {
        list.Add(c);
    }

    public override Component GetChild(int i)
    {
        return (Component)list[i];
    }

    public override void Operation()
    {
        foreach (Component child in list)
        {
            child.Operation();
        }
    }

    public override void Remove(Component c)
    {
        list.Remove(c);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值