设计模式目录
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
这模式好多语言都已经变成类库了,这里我就不实现了,一般list都带一个迭代器。
这里添加这个是为了初学者做个了结,明白该模式是个什么东西。
简单说一下吧,一个迭代器(Iterator),能够遍历另一个聚合对象(Aggregate)的所有元素。
还是写一版简单的代码吧(迭代的是数组,通常情况下,不应该是数组的,因为本身数组是不需要迭代的,这里为了体现一下迭代器的作用)
数组通常是可以迭代的,但是我们自定义的一个聚合对象往往没有,需要给他配置一个迭代器。
代码
js实现
c#实现
c++实现
#include <iostream>
using namespace std;
#include <string>
//抽象层
template <class T>
class Iterator{
public:
int index;
int end;
T* marry;
public:
void First(){
index = 0;
}
void Next(){
index++;
}
bool IsDone(){
if(index == end){
return false;
}
return true;
}
T* CurentItem(){
return &marry[index];
}
};
template <class T>
class Aggregate{
public:
T* marry;
virtual Iterator<T>* CreateIterator()=0;
};
//具体层
template <class T>
class ConcretIterator:public Iterator<T> {
public:
//Aggregate<T>* mt;
ConcretIterator(Aggregate<T>* t){
marry = t->marry;
}
};
template <class T>
class ConcreteAggregate:public Aggregate<T>{
public:
virtual Iterator<T>* CreateIterator(){
ConcretIterator<T>* t = new ConcretIterator<T>(this);
return t;
}
};
template <class T>
class A{
};
//客户端调用
int main()
{
cout<<"迭代器模式演示\n";
ConcreteAggregate<int>* aggreagate = new ConcreteAggregate<int>();
int arrays[] = {5,2,4};
aggreagate->marry = arrays;
Iterator<int>* iterator = aggreagate->CreateIterator();
iterator->end = 3;
iterator->index = 0;
while(iterator->IsDone()){
int* i = iterator->CurentItem();
cout<<""<<*i<<"\n";
iterator->Next();
}
//看代码不用考虑以下内容
int cin_a;
cin>>cin_a;
return 0;
}