迭代器模式简单实现

设计模式目录
迭代器模式
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
这模式好多语言都已经变成类库了,这里我就不实现了,一般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;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值