【設計模式基礎】行為模式 - 7 - 迭代器(Iterator)
1. 模式意圖
別名遊標(Cursor),提供一種方法順序訪問一個聚合物件中各個元素,而又不需要暴露該物件的內部物件。
這一模式的關鍵思想是將對列表/聚合的訪問和遍歷從聚合物件中分離出來並放入一個迭代器物件中。迭代器類定義一個訪問該聚合元素的介面。迭代器物件負責跟蹤當前的元素:即,它知道哪些元素已經遍歷過了。
將遍歷機制與聚合物件分離使我們可以定義不同的迭代器來實現不同的遍歷策略。
迭代器和聚合是耦合在一起的,而且客戶物件必須知道遍歷的聚合結構。最好能有一種辦法使得不需改變客戶程式碼即可改變該聚合類。可以通過將迭代器的概念推廣到多型迭代來達到這個目標。
建立迭代器,要讓聚合物件負責建立相應的迭代器。客戶請求呼叫該操作以獲得一個迭代器物件。
在同一個聚合上可以有多個遍歷,每個迭代器保持它自己的遍歷狀態。因此,可以同時進行多個遍歷。
2. 模式定義
迭代器(Iterator): 迭代器定義訪問和遍歷元素的介面。
具體迭代器(ConcreteIterator): 具體迭代器實現迭代器介面;對該聚合遍歷時跟蹤當前位置。
聚合(Aggregate): 聚合定義建立相應迭代器物件的介面。
具體聚合(ConcreteAggregate):具體聚合實現建立相應迭代器的介面。
3. 模式實現
3.1 Java實現迭代器模式
interface Iterator {
public Object next();
public boolean hasNext();
}
class ConcreteIterator implements Iterator{
private List list = new ArrayList();
private int cursor =0;
public ConcreteIterator(List list){
this.list = list;
}
public boolean hasNext() {
if(cursor==list.size()){
return false;
}
return true;
}
public Object next() {
Object obj = null;
if(this.hasNext()){
obj = this.list.get(cursor++);
}
return obj;
}
}
interface Aggregate {
public void add(Object obj);
public void remove(Object obj);
public Iterator iterator();
}
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);
}
}
public class Client {
public static void main(String[] args){
Aggregate ag = new ConcreteAggregate();
ag.add("1");
ag.add("2");
ag.add("3");
Iterator it = ag.iterator();
while(it.hasNext()){
String str = (String)it.next();
System.out.println(str);
}
}
}
4. 模式應用
相關文章
- 初學設計模式(java版)一:行為型模式之--Iterator模式(迭代器模式)設計模式Java
- 迭代器模式(Iterator)模式
- 設計模式(二十四)----行為型模式之迭代器模式設計模式
- 行為型模式:迭代器模式模式
- Java基礎Iterator迭代器Java
- js設計模式--迭代器模式JS設計模式
- JS設計模式(迭代器模式)JS設計模式
- 設計模式(十七)迭代器模式設計模式
- 設計模式之迭代器模式設計模式
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- 設計模式系列之迭代器模式(Iterator Pattern)——遍歷聚合物件中的元素設計模式物件
- 行為型:迭代器模式模式
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- golang設計模式之迭代器模式Golang設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- 簡說設計模式——迭代器模式設計模式
- 極簡設計模式-迭代器模式設計模式
- 「補課」進行時:設計模式(13)——迭代器模式設計模式
- 設計模式(十六)迭代器設計模式
- C#設計模式之迭代器模式C#設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- 23天設計模式之迭代器模式設計模式
- 【ES6基礎】迭代器(iterator)
- Rust語言之GoF設計模式:迭代器模式RustGo設計模式
- 16.java設計模式之迭代器模式Java設計模式
- 軟體設計模式系列之十八——迭代器模式設計模式
- 軟體設計模式學習(二十)迭代器模式設計模式
- 迭代器設計模式知識概括設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 設計模式:可複用物件導向軟體及基礎:4-7 物件行為模式:備忘錄模式(Memento)設計模式物件
- 《JavaScript設計模式與開發實踐》模式篇(4)—— 迭代器模式JavaScript設計模式
- java 設計模式基礎Java設計模式
- 設計模式-行為型模式-中介者模式設計模式
- 設計模式(十九)----行為型模式之命令模式設計模式
- Iterator迭代器
- 迭代器 iterator
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼
- 迭代器模式模式
- Java基礎篇--設計模式Java設計模式