迭代器模式
迭代器模式屬于行為模式.
主要用于解決對一個(gè)聚合對象中的所有元素的獲取,但是同時(shí)又不會(huì)暴露該對象的內(nèi)部細(xì)節(jié)悼嫉。
主要分為迭代器接口,具體實(shí)現(xiàn)迭代器,容器,具體實(shí)現(xiàn)的容器
使用場景
- 訪問一個(gè)對象內(nèi)部的元素而不暴露內(nèi)部細(xì)節(jié)
- 要獲取多個(gè)對象的內(nèi)部元素,提供統(tǒng)一的接口訪問
代碼示例
(一) 迭代器接口
public interface Iterator {
boolean hasNext();
Object next();
}
(二) 具體迭代器
public class ConcreteIterator implements Iterator {
private int position;
private List list = new ArrayList();
public ConcreteIterator(List list){
this.list = list;
}
@Override
public boolean hasNext() {
if (position == list.size()) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
Object obj = null;
if(this.hasNext()){
obj = this.list.get(position++);
}
return obj;
}
}
(三)容器接口
public interface Aggregate {
void add(Object obj);
void remove(Object obj);
Iterator iterator();
}
(四)具體的容器
public class ConcreteAggregate implements Aggregate {
private List list = new ArrayList();
public void add(Object obj) {
list.add(obj);
}
public Iterator iterator() {
return new ConcreteIterator(list);
}
public void remove(Object obj) {
list.remove(obj);
}
}
調(diào)用方式
Aggregate aggregate=new ConcreteAggregate();
aggregate.add("1");
aggregate.add("2");
aggregate.add("3");
aggregate.add("4");
aggregate.add("5");
aggregate.add("6");
Iterator iterator = aggregate.iterator();
while (iterator.hasNext()){
System.out.println("\n"+iterator.next());
}
顯示結(jié)果
1
2
3
4
5
6
總結(jié)
-
優(yōu)點(diǎn)
- 簡化遍歷操作,特別是對于對象的元素遍歷獲取
- 外部調(diào)用只需要得到迭代器即可,內(nèi)部具體遍歷方式不需要關(guān)心,適用于復(fù)雜遍歷
-
缺點(diǎn)
- 簡單遍歷反而增加操作,例如數(shù)組和有序列表
- 增加了一部分類