第11章:组合模式-树形结构的处理
定义:
组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层
次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致
性。
递归处理
杀毒软件需要对文件夹和具体文件进行杀毒,文件夹称为容器,具体文件称为叶子
结构:
代码实现:
//抽象构件
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(); //业务方法
}
//叶子构件
class Leaf extends Component {
public void add(Component c) {
//异常处理或错误提示
}
public void remove(Component c) {
//异常处理或错误提示
}
public Component getChild(int i) {
//异常处理或错误提示
return null;
}
public void operation() {
//叶子构件具体业务方法的实现
}
}
//容器构件
class Composite extends Component {
private ArrayList<Component> list = new ArrayList<Component>();
public void add(Component c) {
list.add(c);
}
public void remove(Component c) {
list.remove(c);
}
public Component getChild(int i) {
return (Component) list.get(i);
}
public void operation() {
//容器构件具体业务方法的实现
//递归调用成员构件的业务方法
for (Object obj : list) {
((Component) obj).operation();
}
}
}
应用实例:
杀毒软件需要对文件夹和具体文件进行杀毒,文件夹称为容器,具体文件称为叶子
使用面向对象的方式实现杀毒
//图像文件类
class ImageFile {
private String name;
public ImageFile(String name) {
this.name = name;
}
public void killVirus() {
//简化代码,模拟杀毒
System.out.println("----对图像文件'" + name + "'进行杀毒");
}
}
//文本文件类
class TextFile {
private String name;
public TextFile(String name) {
this.name = name;
}
public void killVirus() {
//简化代码,模拟杀毒
System.out.println("----对文本文件'" + name + "'进行杀毒"</