组合模式(composite)

定义:将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 优点:高层模块调用简单,节点自由增加 缺点:与依赖倒置原则冲突

1.1. 角色

Component抽象构件角色:参加组合对象的共有方法和属性. Leaf叶子构件:其下再也没有其他分支,遍历的最小单元 Composite树枝构件:组合树枝节点和叶子节点形成一个树形结构.

使用场景:只要是树形结构,体现局部和整体的关系的时候,这种关系还可能比较深的时候考虑组合模式

安全模式:把树枝节点和树叶节点彻底分开了,胜在安全.

抽象构件

public abstract class AbstractComponent {
    /** 父节点 */
    private AbstractComponent parent = null;
    /**  
     * @Description  个体和整体都具有的共享
     */
    public void doSomething() {
        // 编写业务逻辑
    }

    public AbstractComponent getParent() {
        return parent;
    }

    public void setParent(AbstractComponent parent) {
        this.parent = parent;
    }
}

树枝构件

public class Composite extends AbstractComponent {
    /** 构件容器 */
    private ArrayList<AbstractComponent> componentList = new ArrayList<AbstractComponent>();

    /**  
     * @Description  增加一个构件
     */
    public void add(AbstractComponent component) {
        component.setParent(this);
        this.componentList.add(component);
    }

    /**  
     * @Description  删除一个构件
     */
    public void remove(AbstractComponent component) {
        this.componentList.remove(component);
    }

    /**  
     * @Description  获取分支下的所有构件
     */
    public ArrayList<AbstractComponent> getChildren() {
        return this.componentList;
    }
}

树叶构件

public class Leaf extends AbstractComponent {   
}

透明模式:遵循了依赖倒转原则,方便系统进行扩展,但是不太安全. 实现:把树枝构件的方法抽象给抽象构件,树枝构件和树叶构件都实现抽象构件.

results matching ""

    No results matching ""