概念:
将对象组合组合成树形结构以表示“部分-整体”的层次机构。composite使得用户对单个对象和组合对象的使用具有一致性。
案例:
利用组合模式,读取子文件的个数。
类图:
file:
public interface File {
public void operation();
public void add(File c);
public void remove(File c);
public void getChild(int i);
}
floder:
package composite;
import java.util.ArrayList;
public class floder implements File {
ArrayList<File> list=new ArrayList<File>();
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public floder(String name) {
super();
this.name = name;
}
@Override
public void operation() {
System.out.println(getName());
}
@Override
public void add(File c) {
System.out.println("在"+getName()+"插入文件:");
c.operation();
list.add(c);
}
@Override
public void remove(File c) {
System.out.println("删除"+getName()+"中文件");
c.operation();
list.remove(c);
}
@Override
public void getChild(int i) {
i=list.size();
System.out.println(getName()+"中的子文件有"+i+"个");
}
}
doc:
package composite;
public class doc implements File{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public doc(String name) {
super();
this.name = name;
}
@Override
public void operation() {
String name=getName();
System.out.println(name);
}
@Override
public void add(File c) {
System.out.println("不是文件夹,不能插入文件");
}
@Override
public void remove(File c) {
System.out.println("不是文件夹,不能删除文件");
}
@Override
public void getChild(int i) {
// TODO Auto-generated method stub
}
}
client:
package composite;
public class Client {
public static void main(String[] args) {
doc ppt=new doc("javase.ppt");
doc docx=new doc("作业1.docx");
doc txt=new doc("组合模式.txt");
floder c1=new floder ("设计模式文件夹");
floder c2=new floder ("设计模式作业文件夹");
File c=null;
c1.add(c2);
c1.add(ppt);
c1.add(txt);
c2.add(docx);
c=c1;
int i=0;
c.getChild(i);
c=c2;
c.getChild(i);
c.remove(docx);
c.getChild(i);
c=c1;
c1.getChild(i);
}
}
结果: