介绍

组合模式(Composite Pattern)也称为部分整体模式 (Part Whole Pattern) ,属于结构性设计模式,组合模式比较简单,它将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。

定义

将对象组合成树形结构以表示 ”部分-整体“ 的层次结构,使得用户对整个对象和组合对象的使用具有一致性。

使用场景

  • 表示对象的 ”部分-整体“ 层次结构时。
  • 从一个整体中能够独立出部分模块或功能的场景。

UML 类图

hfOsl.png

  • Component: 抽象根节点,为组合中的对象声明接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理 Component 的子节点。可在递归结构中定义一个接口,用于访问一个父节点,并在合适的情况下实现它。
  • Composite: 定义有子节点的那些枝干节点的行为,存储子节点,在 Component 接口中实现与子节点有关的操作。
  • Leaf: 在组合中表示叶子节点对象,叶子节点没有子节点,在组合中定义节点对象的行为。
  • Client: 通过 Component 接口操纵组合节点的对象。

代码示例

简单示例

抽象根节点:

public abstract class Component {


    /**
* 节点名称
*/
    protected String name;

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

    /**
* 具体的逻辑方法由子类实现
*/
    public abstract void doSomething();

    /**
* 添加子节点
* @param component
*/
    public abstract void addChild(Component component);

    /**
* 移除子节点
* @param component
*/
    public abstract void removeChild(Component component);

    /**
* 获取子节点
* @param index
* @return
*/
    public abstract Component getChildren(int index);

}
复制代码

枝干节点:

public class Composite extends Component {
    /**
* 存储节点的容器
*/
    private List

GankRobot转载声明

原文出处:掘金Androidd

原文作者:DevYK

原文地址:https://juejin.im/post/5d7cbda7f265da03d2116f64