将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性
 在以下情况下可以考虑使用组合模式:
 (1) 在具有整体和部分的层次结构中,希望通过一种方式忽略整体与部分的差异,客户端可以一致地对待它们。
 (2) 在一个使用面向对象语言开发的系统中需要处理一个树形结构。
 (3) 在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一些新的类型。

设计模式之组合模式(Composite)

/**
 * 抽象构建类
 * @author guk
 *
 */
public abstract class Component {
    public abstract void add(Component c); //增加成员  
    public abstract void remove(Component c); //删除成员  
    public abstract Component getChild(int i); //获取成员  
    public abstract void operation();  //业务方法  
}
 

/**
 *枝节点
 * @author guk
 *
 */
public class Composite extends Component {
    private ArrayList<Component> list = new ArrayList<>(32);
    @Override
    public void add(Component c) {
        list.add(c);
    }

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

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

    @Override
    public void operation() {
        //容器构件具体业务方法的实现  
        //递归调用成员构件的业务方法  
        for(Component obj:list) {  
            obj.operation();  
        }  
    }

}

/**
 * 树叶节点
 * @author guk
 *
 */
public class Leaf  extends Component{

    @Override
    public void add(Component c) {
        //异常处理或错误提示 
    }

    @Override
    public void remove(Component c) {
        //异常处理或错误提示 
    }

    @Override
    public Component getChild(int i) {
        //异常处理或错误提示 
        return null;
    }

    @Override
    public void operation() {
         //叶子构件具体业务方法的实现  
    }

}
 

 

 

相关文章: