デザインパターン:イテレータモード

目的:データに格納されたデータとデータの結合を低減するために、クエリを分離します

継承図:

例:

//イテレータインターフェイス定義
テンプレートを<型名T> 
クラスイテレータ
{ 
パブリック:
	仮想BOOLのhasNext()= 0; 
	仮想次にT()= 0; 
};
//定义集合的接口
テンプレート<型名T> 
クラス集合
{ 
パブリック:
	仮想イテレータ<T> * createIterator()= 0; 
	仮想TのgetItem(INT指数)= 0。
	仮想INTのgetSize()= 0; 
	仮想ボイドSetItem関数(T tは)= 0。
}。
//迭代器的具体实现类
テンプレート<typenameにT> 
クラスIteratorImp:公共イテレータ<T> 
{ 
	集計<T> * P; 
	int型のインデックス。
公共:
	IteratorImp(集合<T> *集計)
	{ 
		P =集約。
		インデックス= 0; 
	} 
	
	BOOLのhasNext()
	{ 
		IF(指数<P->のgetSize())
		{ 
			trueを返します。
		} 
		{ 
			falseを返します。
		} 
	} 
	
	T、次の()
	{ 
		P->のgetItem(インデックス++)を返します。
	} 
}。
実装クラス設定// 
テンプレート<型名T> 
公共集合<T>:クラスAggregateImp 
{ 
	;ベクトル<T>データ
:公共
	イテレータ<T> * createIterator()//これは、重要なステップであり、フックのセットイテレータを
	セット{//イテレータを初期化し、イテレータを返す
		<T>(本)新しい新しいIteratorImpを返す; 
	} 
	
	TのgetItem(INTインデックス)
	{ 
		戻りデータ[インデックス]; 
	} 
	
	int型のgetSize()
	{ 
		)(data.sizeを返します; 
	} 
	
	SetItem関数ボイド(T T)
	{ 
		data.push_back(T); 
	} 
};
INTメイン()
{ 
	集合<整数> * D =新しいAggregateImp <整数>(); 
	イテレータ<整数> *イテレータ= D-> createIterator(); 
	
	D-> SetItem関数(1)。
	D-> SetItem関数(3)。
	D-> SetItem関数(4)。
	D-> SetItem関数(2)。

	一方、(iterator->のhasNext())
	{ 
		COUT << iterator->次の()<< ENDL。
	} 
	
	0を返します。
}

  

おすすめ

転載: www.cnblogs.com/chusiyong/p/11431340.html