我写这个例子只是想练习组合模式和迭代器模式的使用,模仿了headfirst设计模式的写法,解决了里面的bug,自己mark一下,对于java初学者不是好理解,so~多看几遍总归有些收获,高手就轻拍吧...
package com.alex.component;
import java.util.Iterator;
@SuppressWarnings("rawtypes")
public abstract class AbstractFile{
public String getFileName() {
throw new UnsupportedOperationException();
}
public String getFileType() {
throw new UnsupportedOperationException();
}
public void setFileType(String fileType) {
throw new UnsupportedOperationException();
}
public void add(AbstractFile abstractFile){
throw new UnsupportedOperationException();
}
public void remove(AbstractFile abstractFile){
throw new UnsupportedOperationException();
}
public AbstractFile getChild(int i){
throw new UnsupportedOperationException();
}
public void print(){
throw new UnsupportedOperationException();
}
public boolean isSelectedFile(String[] configs){
throw new UnsupportedOperationException();
}
public abstract Iterator createIterator();
public boolean isNotTheSelectedFile(String[] configs){
throw new UnsupportedOperationException();
}
}
package com.alex.component;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.alex.iterator.DirectoryCompositeIterator;
@SuppressWarnings("rawtypes")
public class DirectoryComposite extends AbstractFile {
private List<AbstractFile> list = new ArrayList<AbstractFile>();;
private String fileName;
private String fileType;
public DirectoryComposite(String fileName,String fileType) {
this.fileName=fileName;
this.fileType=fileType;
}
@Override
public String getFileName() {
return fileName;
}
@Override
public String getFileType() {
return fileType;
}
@Override
public void add(AbstractFile abstractFile) {
list.add(abstractFile);
}
@Override
public void remove(AbstractFile abstractFile) {
list.remove(abstractFile);
}
@Override
public AbstractFile getChild(int i) {
return (AbstractFile)list.get(i);
}
@Override
public void print() {
System.out.println(getFileName()+","+getFileType());
System.out.println("-------------------------");
/* Iterator iterator=list.iterator();
while(iterator.hasNext()){
AbstractFile abstractFile=(AbstractFile)iterator.next();
abstractFile.print();
}*/
}
@Override
public Iterator createIterator() {
// retur