组合模式
概述
一个容器对象下拥有多个叶子对象,类似树形结构
模式实例
定义一个抽象类,它既可以代表叶子,也可以代表容器
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();
}
}
}