/**
* 组合模式 1.优点:统一处理
*
* 抽象组件: 1.提取叶子和容器的共同部分
*
* @author zhangjianbin
*
*/
public interface AbstractFile {
void killVirus();
}
/**
* 叶子组件
* 下面没有孩子了
* @author zhangjianbin
*
*/
class ImageFile implements AbstractFile {
private String name;
public ImageFile(String name) {
super();
this.name = name;
}
@Override
public void killVirus() {
System.err.println("查杀图片文件,名子:"+this.name);
}
}
/**
* 容器节点
* 下面还有孩子
* @author zhangjianbin
*
*/
class FolderFile implements AbstractFile {
private String name;
private List<AbstractFile> list = new ArrayList<AbstractFile>();
public FolderFile(String name) {
super();
this.name = name;
}
public void add(AbstractFile file){
this.list.add(file);
}
public void remove(AbstractFile file){
this.list.remove(file);
}
public AbstractFile getChidFile(int index){
return this.list.get(index);
}
@Override
public void killVirus() {
System.err.println("查杀文件夹,名子:"+this.name);
for(AbstractFile file:list){
file.killVirus();
}
}
}
public class Client {
public static void main(String[] args) {
AbstractFile f1,f2,f3;
FolderFile file = new FolderFile("我的文件夹");
f1 = new ImageFile("图片.jpg");
f2 = new ImageFile("hello.jpg");
file.add(f1);
file.add(f2);
file.killVirus();
}
}