設計模式(Java隨筆)—迭代器模式
阿新 • • 發佈:2019-01-26
迭代器模式(Iterator Pattern):最常被使用的幾個模式之一,被廣泛的應用到Java API中,如Java集合(Collection)框架中,就有用迭代器來遍歷集合中的元素(在Java開發中,儘量不要自己寫迭代器模,使用Java API提供的Iterator一般就能滿足專案要求)
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying respresentation.
提供一種方法訪問一個容器物件中各個元素,而又不需要暴露該物件的內部細節。
迭代器模式中的四個角色:
- 抽象迭代器(Iterator)模式:定義訪問和遍歷元素的介面
- 具體迭代器(Concrete Iterator)模式:實現抽象迭代器,完成容器元素的遍歷
- 抽象聚集(Aggregate)角色:提供儲存元素,建立迭代器角色的介面
- 具體聚集(Concrete Aggregate)角色:實現抽象聚集,儲存元素,建立迭代器物件
優點:封裝遍歷演算法,使演算法獨立於聚集角色,客戶無需知道聚集物件的型別,即使聚集物件的型別發生變化,也不會影響遍歷過程
迭代器模式程式碼實現(泛型):
import java.util.Vector; public class IteratorModel { /* * 迭代器模式 */ public static void main(String[] args) { //建立聚集物件,並新增元素 Aggregate<String> aggregate=new ConcreteAggregate<String>(); aggregate.add("黯"); aggregate.add("葉"); aggregate.add("你"); aggregate.add("好"); aggregate.add("!"); //建立迭代器物件,遍歷元素 Iterator<String> iterator=aggregate.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next()); } } } //抽象迭代器介面 interface Iterator<E>{ public E next();//返回下一個元素 public boolean hasNext();//是否還有下一個元素 } //具體迭代器 class ConcreteIterator<E> implements Iterator<E>{ private Aggregate<E> aggregate=null; private int index; private int size; public ConcreteIterator(Aggregate<E> aggregate) { this.aggregate=aggregate; this.size=aggregate.size(); this.index=0; } @Override public boolean hasNext() { return index<size; } @Override public E next() { return aggregate.get(index++); } } //抽象聚集介面(Aggregate) interface Aggregate<E>{ public void add(E e);//新增元素 public Iterator<E> iterator();//建立迭代器物件 public int size();//元素個數 public E get(int index);//返回指定元素 } //具體聚集 class ConcreteAggregate<E> implements Aggregate<E>{ private Vector<E> vector=new Vector<E>(); @Override public void add(E e) { vector.addElement(e); } @Override public Iterator<E> iterator() { return new ConcreteIterator<E>(this); } @Override public int size() { return vector.size(); } @Override public E get(int index) { if(index<size()) { return vector.get(index); } return null; } }
執行結果:
黯葉你好!
參考書籍:
《大話設計模式》——程傑
《設計模式(Java版)》
參考文件:JDK API 1.6.0中文版