迭代器模式(Iterator Pattern)提供一種方法,使得在不暴露底層實現(xiàn)的情況下,提供一種順序訪問一組對象的方法。Java中的Iterator.java迭代器接口就是該設計模式的體現(xiàn)。
一、需求舉例:
遍歷項目中使用的開發(fā)語言,{"Java", "Python", "C/C++", "C#", "Groovy", "Scala", "Shell"},分別做相應的處理。
二、類圖:
三、代碼實例:
1.迭代接口:MyIterator
package com.lance.iterator;
public interface MyIterator {
boolean hasNext();
Object next();
}
2.迭代器實現(xiàn)類:CodeIterator
package com.lance.iterator;
public class CodeIterator implements MyIterator{
public String codes[];
int index;
public CodeIterator(String[] codes, int index) {
this.codes = codes;
this.index = index;
}
@Override
public boolean hasNext() {
if(index < codes.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return codes[index++];
}
return null;
}
}
3.容器父類:
package com.lance.iterator;
public interface MyContainer {
MyIterator getIterator();
}
4.容器實現(xiàn)類:
package com.lance.iterator;
public class CodeContainer implements MyContainer {
private MyIterator iterator;
public CodeContainer(MyIterator iterator) {
this.iterator = iterator;
}
@Override
public MyIterator getIterator() {
return iterator;
}
}
5.主類:IteratorPattern
package com.lance.iterator;
public class IteratorPattern {
public static void main(String[] args) {
System.out.println("==========start==========");
String codes[] = {"Java", "Python", "C/C++", "C#", "Groovy", "Scala", "Shell"};
CodeIterator iterator = new CodeIterator(codes, 0);
CodeContainer container = new CodeContainer(iterator);
for(MyIterator myIterator=container.getIterator();myIterator.hasNext();) {
System.out.println("code language : " + myIterator.next());
}
System.out.println("==========end==========");
}
}
輸出結(jié)果:
==========start==========
code language : Java
code language : Python
code language : C/C++
code language : C#
code language : Groovy
code language : Scala
code language : Shell
==========end==========