迭代器模式,又称游标模式,提供一种方法顺序访问一个集合对象中的各个元素,而又不需要暴露该对象的内部表示。
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 等操作,反向迭代器等。 但是迭代器的思想没变,也怎么不复杂。