参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著
实验目的
组合模式通过构建抽象接口,对开发人员屏蔽子类具体实现,达到统一操作的目的
实验代码
package Composite;
import java.util.ArrayList;
interface Composite<T> {
public void tranverse();
public void add(Composite value);
public void remove(Composite value);
}
class File<T> implements Composite{
private T fileName;
public File(T _fileName){
fileName = _fileName;
}
@Override
public void tranverse() {
// TODO Auto-generated method stub
System.out.println("fileName is " + fileName);
}
@Override
public void add(Composite value) {
// TODO Auto-generated method stub
System.out.println("not support in File");
}
@Override
public void remove(Composite value) {
// TODO Auto-generated method stub
System.out.println("not support in File");
}
}
class Folder implements Composite{
private ArrayList<Composite> array = new ArrayList<Composite>();
private String folderName;
public Folder(String _folderName){
folderName = _folderName;
}
@Override
public void tranverse() {
// TODO Auto-generated method stub
System.out.println("folderName is " + folderName);
for(Composite ele : array){
ele.tranverse();
}
}
@Override
public void add(Composite value) {
// TODO Auto-generated method stub
array.add(value);
}
@Override
public void remove(Composite value) {
// TODO Auto-generated method stub
array.remove(value);
}
}
public class CompositeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Composite file1 = new File("file1");
Composite file2 = new File("file2");
Composite file3 = new File("file3");
Composite file4 = new File("file4");
Composite folder12 = new Folder("folder12");
Composite folder34 = new Folder("folder34");
folder12.add(file1);
folder12.add(file2);
folder34.add(file3);
folder34.add(file4);
Composite folderroot = new Folder("folderroot");
folderroot.add(folder12);
folderroot.add(folder34);
folderroot.tranverse();
}
}
结果输出
folderName is folderroot
folderName is folder12
fileName is file1
fileName is file2
folderName is folder34
fileName is file3
fileName is file4
结论
- 开发人员无需关注子类,通过公共父类(接口,抽象类)即可操作所有元素
- 元素组织结构为树状