定義
迭代器模式(Iterator Pattern)是 Java 和 .Net 編程環(huán)境中非常常用的設(shè)計(jì)模式要门。這種模式用于順序訪問(wèn)集合對(duì)象的元素混聊,不需要知道集合對(duì)象的底層表示鞠柄。
迭代器模式屬于行為型模式猜丹。
實(shí)現(xiàn)
我們將創(chuàng)建一個(gè)敘述導(dǎo)航方法的 Iterator 接口和一個(gè)返回迭代器的 Container 接口鳖昌。實(shí)現(xiàn)了 Container 接口的實(shí)體類將負(fù)責(zé)實(shí)現(xiàn) Iterator 接口卤唉。
IteratorPatternDemo涩惑,我們的演示類使用實(shí)體類 NamesRepository 來(lái)打印 NamesRepository 中存儲(chǔ)為集合的 Names。
步驟 1
創(chuàng)建接口桑驱。
Iterator.java
public interface Iterator {
public boolean hasNext();
public Object next();
}
Container.java
public interface Container {
public Iterator getIterator();
}
步驟 2
創(chuàng)建實(shí)現(xiàn)了 Container 接口的實(shí)體類竭恬。該類有實(shí)現(xiàn)了 Iterator 接口的內(nèi)部類 NameIterator跛蛋。
NameRepository.java
public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
步驟 3
使用 NameRepository 來(lái)獲取迭代器,并打印名字痊硕。
IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
步驟 4
驗(yàn)證輸出赊级。
Name : Robert
Name : John
Name : Julie
Name : Lora