组合模式

概述

一个容器对象下拥有多个叶子对象,类似树形结构


模式实例

定义一个抽象类,它既可以代表叶子,也可以代表容器

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();
}

叶子对象需要实现抽象类中声明的所有方法,但其不能拥有叶子对象,因此在调用对应方法时需提供异常处理

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() {
        //实现代码
    }
}

容器对象需要实现抽象类中声明的所有方法,它将递归调用其叶子对象的业务方法

public class Composite extends Component {

    private ArrayList list = new ArrayList();

    @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 (Component) list.get(i);
    }

    @Override
    public void operation() {
        for (Object o : list) {
            ((Component) o).operation();
        }
    }
}
posted @ 2020-03-16 14:41  低吟不作语  阅读(563)  评论(0编辑  收藏  举报