迭代器模式,又称游标模式,提供一种方法顺序访问一个集合对象中的各个元素,而又不需要暴露该对象的内部表示。

template<typename T>
class Iterator{
public :
vitrual void first() = 0;
vitrual void next() = 0;
vitrual bool isDone() = 0;
vitrual T& currentItem() = 0;
}
template<typename T>
class Aggregate{
public :
Iterator<T> getIterator()=0;
}
template<typename T>
class MyIterator: public Iterator<T>{
private :
MyCollection<T> mc;
public :
MyIterator(const MyCollection<T> &c):mc(c){}
vitrual void first(){...}
vitrual void next() {...}
vitrual bool isDone() {...}
vitrual T& currentItem() {...}
}
template<typename T>
class MyCollection: public Aggregate{
public :
Iterator<T> getIterator(){ return MyIterator(*this);}
.....
}
void main(){
MyCollection<int> myCollection;
....
Iterator<int> iterator = myCollection.getIterator();
for(iterator.first();iterator.isDone();iterator.next()){
cout<<"currentItem:"<<iterator.currentItem();
}
}
可以通过内部类可是可行的,即把MyIterator类变成MyCollection的内部类实现。为了提高性能,还可以考虑从运行时多态改成编译时多态。在STL库中,已经有成熟的迭代器了,比上述代码的性能更优越,功能更丰富,例如Begin()+n 等操作,反向迭代器等。 但是迭代器的思想没变,也怎么不复杂。
迭代器模式是一种设计模式,它提供了一种方式来顺序访问集合对象的元素,同时保持了对象的内部表示的隐藏。在给定的代码示例中,定义了一个模板类`Iterator`作为迭代器接口,包含`first()`, `next()`, `isDone()`和`currentItem()`等方法。`Aggregate`接口定义了获取迭代器的方法。`MyIterator`实现了`Iterator`接口,并与`MyCollection`类一起工作,允许遍历集合。尽管STL库提供了更高效和功能丰富的迭代器实现,但基本迭代器思想保持不变,提供了一种通用的遍历机制。
1118

被折叠的 条评论
为什么被折叠?



