叠代器模式
叠代器模式(Iterator Pattern) :提供一種方法來訪問聚合對象,而不用暴露這個對象的內部表示,其別名為遊標(Cursor)。叠代器模式是一種對象行為型模式。
2、模式結構
叠代器模式包括例如以下角色:
Iterator: 抽象叠代器
ConcreteIterator: 詳細叠代器
Aggregate: 抽象聚合類
ConcreteAggregate: 詳細聚合類
3、模式分析
聚合是一個管理和組織數據對象的數據結構。
聚合對象主要擁有兩個職責:一是存儲內部數據。二是遍歷內部數據。
存儲數據是聚合對象最主要的職責。
將遍歷聚合對象中數據的行為提取出來。封裝到一個叠代器中。通過專門的叠代器來遍歷聚合對象的內部數據,這就是叠代器模式的本質。
叠代器模式是“單一職責原則”的完美體現。
模式分析
自己定義叠代器
MyIterator——抽象叠代器
MyCollection——抽象聚合類
NewCollection——詳細聚合類
NewIterator——詳細叠代器
Client
public class ConcreteIterator implements Iterator { private ConcreteAggregate objects; public ConcreteIterator(ConcreteAggregate objects) { this.objects=objects; } public void first() { ...... } public void next() { ...... } public boolean hasNext() { ...... } public Object currentItem() { ...... } } public class ConcreteAggregate implements Aggregate { ...... public Iterator createIterator() { return new ConcreteIterator(this); } ...... }
在叠代器模式中應用了工廠方法模式。聚合類充當工廠類。而叠代器充當產品類,因為定義了抽象層。系統的擴展性非常好,在client能夠針對抽象聚合類和抽象叠代器進行編程。
因為非常多編程語言的類庫都已經實現了叠代器模式,因此在實際使用中我們非常少自己定義叠代器。僅僅須要直接使用Java、C#等語言中已定義好的叠代器就可以,叠代器已經成為我們操作聚合對象的基本工具之中的一個。
4、模式優缺點
叠代器模式的長處
它支持以不同的方式遍歷一個聚合對象。
叠代器簡化了聚合類。
在同一個聚合上能夠有多個遍歷。
在叠代器模式中,添加新的聚合類和叠代器類都非常方便,無須改動原有代碼,滿足“開閉原則”的要求。
叠代器模式的缺點
因為叠代器模式將存儲數據和遍歷數據的職責分離,添加新的聚合類須要相應添加新的叠代器類,類的個數成對添加,這在一定程度上添加了系統的復雜性。
5、模式適用環境
在下面情況下能夠使用叠代器模式:
訪問一個聚合對象的內容而無須暴露它的內部表示。
須要為聚合對象提供多種遍歷方式。
為遍歷不同的聚合結構提供一個統一的接口。
叠代器模式