12、组合模式

组合模式将对象组合成树状的结构,当我们访问某个对象时,对它包含的所有子对象一致访问,以此递归

举个例子:张三、李四都属于三班,当我们奖励三班时,同样也会奖励张三、李四。此时张三、李四就可以看做三班的子对象,当我们处理三班时,连同张三、李四一起调用

组合模式由一下几个模块组成:

  • 抽象构件角色:为树叶构件角色和树枝构件角色提供接口
  • 树叶构件角色:叶节点对象,不包含子对象
  • 树枝构件角色:枝节点对象,包含子对象

下面通过简单示例认识组合模式:

interface Component {

    void add(Component c);

    void remove(Component c);

    Component getChild(int i);

    void operation();

}

class Leaf implements Component {

    String name;

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

    @Override
    public void add(Component c) {

    }

    @Override
    public void remove(Component c) {

    }

    @Override
    public Component getChild(int i) {
        return null;
    }

    @Override
    public void operation() {
        System.out.println("树叶" + name + "被访问");
    }

}

class CompositeTest implements Component {

    private List<Component> children = new ArrayList<>();

    @Override
    public void add(Component c) {
        children.add(c);
    }

    @Override
    public void remove(Component c) {
        children.remove(c);
    }

    @Override
    public Component getChild(int i) {
        return children.get(i);
    }

    @Override
    public void operation() {
        for (Component c : children) {
            c.operation();
        }
    }
}

如上所示,当我们调用 CompositeTest 对象的 operation() 方法后,它所有子对象的 operation() 方法会一起调用。

总得来说组合模式用的很少,并且很难设计,需维护对象之间的组合关系,而这种关系往往比较复杂,大家了解即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值