组合模式

软件设计模式
2021-05-17 14:29 · 阅读时长2分钟
小课

组合模式是将一系列相同类型的对象组合在一起,然后把它当作单个对象一样使用。如果在开发中,我们总是对同一接口的不同实例对象做相同的操作,那我们应该使用组合模式来简化调用。

组合模式通常由三个部分组成,ComponentLeafComposite

  • Component是功能的统一接口。
  • Leaf实现了Component,是真正实现功能的类。
  • Composite也实现了Component,它内部有多个Leaf实例,统一管理这些Leaf实例,是一个组合类。

下面以一个界面组件的示例来演示一下组合模式,假如我们对界面组件抽象出一个View接口,它有一个方法绘制方法draw。

public interface View {
    void draw();
}

有一个具体的界面组件实现类ViewImpl,它实现了draw方法,用于绘制自身组件。

public class ViewImpl implements View {
    @Override
    public void draw() {
        System.out.println("draw myself");
    }
}

有一个容器类ViewGroup,它可以存放多个界面组件,当调用其draw方法时,它会统一调用自己内部的所有的View的draw方法。

public class ViewGroup implements View {
    private View[] children;

    @Override
    public void draw() {
        for (View view : children) {
            view.draw();
        }
    }
}

这样当外部使用时就无需单独调用每一个View的draw方法来绘制,而是调用ViewGroup的draw方法即可,尤其是当ViewGroup也是另外一个ViewGroup的children中的一个时,一层一层,我们只需要调用最外层的ViewGroup即可,简化了大量的工作。

总结

组合模式主要用于当一组相同类型的对象总是执行相似的动作,我们可以把这一组对象组合成为一个对象,尤其适合上面那种多层级的相似结构,可以大大简化外部对该些对象的管理。

组合模式composite设计模式