設計模式--迭代器模式Iterator(行為型)
1 定義:
1.1 定義:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一種方法訪問一個容器物件中各個元素,而又不暴露該物件的內部細節。)
此模式是一個沒落的模式,基本上沒人會單獨寫一個迭代器模式。沒落的原因是,絕大多數需要迭代器的場合,都已經有了標準的實現。
1.2 通用類圖:
一個更便於理解的類圖:
1.3 通用程式碼:
public interface Aggregate {
// 是容器必然有元素的增加
public void add(Object object);
// 減少元素
public void remove(Object object);
// 由迭代器來遍歷所有的元素
public Iterator iterator();
}
public class ConcreteAggregate implements Aggregate {
// 容納物件的容器
private Vector vector = new Vector();
// 增加一個元素
public void add(Object object) {
this.vector.add(object);
}
// 返回迭代器物件
public Iterator iterator() {
return new ConcreteIterator(this.vector);
}
// 刪除一個元素
public void remove(Object object) {
this.vector.remove(object);
}
}
public interface Iterator {
// 遍歷到下一個元素
public Object next();
// 是否已經遍歷到尾部
public boolean hasNext();
// 刪除當前指向的元素
public boolean remove();
// 返回當前指向的元素
public Object currentItem();
}
public class ConcreteIterator implements Iterator {
private Vector vector = new Vector();
// 定義當前遊標
public int cursor = 0;
@SuppressWarnings("unchecked")
public ConcreteIterator(Vector _vector) {
this.vector = _vector;
}
// 判斷是否到達尾部
public boolean hasNext() {
if (this.cursor == this.vector.size()) {
return false;
} else {
return true;
}
}
// 返回下一個元素
public Object next() {
Object result = null;
if (this.hasNext()) {
result = this.vector.get(this.cursor++);
} else {
result = null;
}
return result;
}
// 刪除當前元素
public boolean remove() {
this.vector.remove(this.cursor);
return true;
}
// 返回當前指向的元素
public Object currentItem() {
return this.vector.get(this.cursor);
}
}
public class Client {
public static void main(String[] args) {
// 宣告出容器
Aggregate agg = new ConcreteAggregate();
// 產生物件資料放進去
agg.add("abc");
agg.add("aaa");
agg.add("1234");
// 遍歷一下
Iterator iterator = agg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
2 優點
方便遍歷容器中的元素。
3 缺點
暫無
4 應用場景
各XDK,PHP,Perl,等。。。
5 注意事項
儘量不要自己寫迭代器模式,看是否已提供。
6 擴充套件
無
轉自:http://blog.csdn.net/yuanlong_zheng/article/details/7584775
相關文章
- 【設計模式基礎】行為模式 - 7 - 迭代器(Iterator)設計模式
- 初學設計模式(java版)一:行為型模式之--Iterator模式(迭代器模式)設計模式Java
- C#設計模式系列:迭代器模式(Iterator)C#設計模式
- JAVA設計模式之 迭代器模式【Iterator Pattern】Java設計模式
- 設計模式-行為篇(迭代器模式)設計模式
- 設計模式的征途—21.迭代器(Iterator)模式設計模式
- 行為型:迭代器模式模式
- 迭代器模式(Iterator)模式
- 設計模式(二十四)----行為型模式之迭代器模式設計模式
- 行為型模式:迭代器模式模式
- 設計模式(十七)迭代器模式設計模式
- js設計模式--迭代器模式JS設計模式
- JS設計模式(迭代器模式)JS設計模式
- 設計模式之迭代器模式設計模式
- 設計模式-行為型設計模式
- 行為型設計模式設計模式
- 使用C# (.NET Core) 實現迭代器設計模式 (Iterator Pattern)C#設計模式
- golang設計模式之迭代器模式Golang設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- 簡說設計模式——迭代器模式設計模式
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- 極簡設計模式-迭代器模式設計模式
- Java設計模式8:迭代器模式Java設計模式
- 設計模式--策略模式Strategy(行為型)設計模式
- 設計模式系列之迭代器模式(Iterator Pattern)——遍歷聚合物件中的元素設計模式物件
- 「補課」進行時:設計模式(13)——迭代器模式設計模式
- 設計模式--直譯器模式Interpreter(行為型)設計模式
- 設計模式(十六)迭代器設計模式
- (Java)設計模式:行為型Java設計模式
- 23天設計模式之迭代器模式設計模式
- javascript設計模式 之 4 迭代器模式JavaScript設計模式
- C#設計模式之迭代器模式C#設計模式
- 23種設計模式之迭代器模式設計模式
- 設計模式之中介者模式(行為型)設計模式
- 設計模式--命令模式Command(行為型)設計模式
- 設計模式--狀態模式State(行為型)設計模式
- 設計模式--中介者模式Mediator(行為型)設計模式
- JavaScript設計模式--行為型別--命令模式JavaScript設計模式型別