Java设计模式(8)——结构型模式之组合模式(Composite)

一、概述

  定义

  将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。

  简图

  

   角色——对应上图中顶点为Component,左边为Leaf,右边为Composite

  1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
子部件。
  2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
  3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除

二、实践

  按照上面的角色,建立相应的类

  Component:

/**
 * 抽象构件角色
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public abstract class Component {
    public abstract void draw();
    public abstract void add(Component c);
    public abstract boolean remove(Component c);
    public abstract Component get(int i);
}

  Leaf叶子节点:当然可以有多个

/**
 * Leaf叶子节点
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public class Leaf extends Component{
    @Override
    public void draw() {

    }

    @Override
    public void add(Component c) {

    }

    @Override
    public boolean remove(Component c) {
        return false;
    }

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

  Composte组合树枝节点

/**
 * 组合类树枝节点
 * 作者: Administrator
 * 日期: 2017/10/28
 **/
public class Composite extends Component{
    private List<Component> childList = new ArrayList<>();

    @Override
    public void draw() {

    }

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

    @Override
    public boolean remove(Component c) {
        return childList.remove(c);
    }

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

三、改进与思考

  适用的情况

  当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。

原文地址:https://www.cnblogs.com/jiangbei/p/7748080.html