///
/// 聚合介面
///
public
inte***ce
ilistcollection
///
/// 迭代器介面
///
public
inte***ce
iterator
///
/// 具體聚合類
///
public
class
persons
:ilistcollection
public
void
add(
intvalue
)public
iterator
getiterator()
}///
/// 具體迭代器類
///
public
class
personiterator
:iterator
int iterator.
getcurrent()
bool iterator.
movenext()
index++
;return
true;}
void iterator.
reset()
}
實現迭代器模式有以下幾個要點:
1.聚合介面和迭代器介面。
2.具體聚合類,定義資料的儲存容器,新增元素的方法等,還有獲取具體迭代器的方法。
3.具體迭代器類,定義迭代內部實現的一些具體細節等。
客戶端呼叫:
static
void
main
(string
args)
iterator temp = persons.
getiterator()
;while
(temp.
movenext()
) console.
read()
;}
結果:
// 摘要:
// 公開列舉數,該列舉數支援在非泛型集合上進行簡單迭代。
public
inte***ce
ienumerable
//// 摘要:
// 支援對非泛型集合的簡單迭代。
public
inte***ce
ienumerator
//// 摘要:
// 將列舉數推進到集合的下乙個元素。
//// 返回結果:
// 如果列舉數成功地推進到下乙個元素,則為 true;如果列舉數越過集合的結尾,則為 false。
//// 異常:
// t:system.invalidoperationexception:
// 在建立了列舉數後集合被修改了。
bool
movenext()
;//// 摘要:
// 將列舉數設定為其初始位置,該位置位於集合中第乙個元素之前。
//// 異常:
// t:system.invalidoperationexception:
// 在建立了列舉數後集合被修改了。
void
reset()
;}這是c#中標準的迭代器模式相關的介面,c#中可迭代的容器都實現了該介面,並且可以直接通過foreach進行迭代輸出。
下面,展示乙個比較簡單的棧的部分源**
class
stack
:ienumerable
//具體的聚合類,實現ienumerable介面
public
virtual
ienumerator
getenumerator()
//實現ienumerable的介面
public
virtual
object
peek()
return _array[_size -1]
;}public
virtual
object
pop(
) _version++
;object result = _array[
--_size]
; _array[_size]
=null
;return result;
}public
virtual
void
push
(object obj)
_array[_size++
]= obj;
_version++;}
[serializable
]private
class
stackenumerator
:ienumerator
//具體的迭代器類,實現迭代器介面
if(_index ==-1
)return currentelement;}}
internal
stackenumerator
(stack stack)
public
virtual
bool
movenext()
bool flag;
if(_index ==-2
)return flag;}if
(_index ==-1
) flag =
(--_index >=0)
;if(flag)
else
return flag;
}public
virtual
void
reset()
_index =-2
; currentelement =
null;}
}
在stack的源**中,stack實現了ienumerable介面的getenumerator()方法,用於返回乙個ienumerator型別的迭代器。而在stack中宣告了乙個stackenumerator 的具體迭代器類,實現ienumerator介面,並且針對stack的資料結構,實現了ienumerator介面的各種方法。 c 迭代器模式
不能直接std 的迭代器代替麼。iterator 定義迭代器訪問和遍歷元素的介面 concreteiterator 實現具體的迭代器 aggregate 定義的容器,建立相應迭代器物件的介面 concreteaggregate 具體的容器實現建立相應迭代器的介面,該操作返回concreteitera...
C 設計模式 迭代器模式
迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式結構圖 iterator迭代器抽象類 class iterator public virtual object first 0 virtual object next 0 virtual ...
C 設計模式 迭代器模式
迭代器模式 提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的結構 每一種資料結構 包括自定義 遍歷自身內部的資料方式都是不同的。但是我們又希望和常規的遍歷方式一樣呼叫,就如for和foreach一樣遍歷。想要以相同的方式遍歷不同型別的聚合物件,首先就要有乙個相同的介面方法來統一獲取,...