Iterator 패턴
Iterator는 무언가를 반복한다는 의미로 반복자라고 부른다. Iterator패턴이란 복합객체 요소들의 내부 표현방식을 공개하지 않고도 순차적으로 접근할 수 있는 방법을 제공한다.
Iterator는 리스트객체에 접근해서 새로운 내용을 삽입하거나 삭제하거나 순회하는 내용을 Iterator객체에 정의를 한다.
Iterator의 적용
1. 객체 내부 표현 방식을 모르고도 집합객체의 각 요소를 순회할 수 있다.
2. 집합 객체를 순회하는 다양한 방법을 제시할 수 있다.
3. 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회할 수 있다.
Iterator 예제
Iterator 클래스 정의
class Iterator {
public : virtual void First(); virtual void Next(); virtual bool IsDone() = 0; virtual Item* GetCurItem() = 0; protected : int curPos_; Iterator() { curPos_ = 0; } };
class ListIterator : public Iterator { public : ListIterator(LinkedList* pList);
bool IsDone(); Item* GetCurItem();
private : LinkedList* pList_; }; |
List 클래스 정의
class AbstractList {
public : virtual Iterator * CreateIterator(int type) = 0;
int Count(); virtual void AddNext(Item *pNewItem, Item *pItem=0) = 0; virtual void AddChild(Item *pNewItem, Item *pItem=0) = 0; virtual void Remove(Item *pItem) = 0; virtual Item* GetItem(int pos) = 0; protected : AbstractList() : totalCnt_ (0) {} int totalCnt_; };
class LinkedList : public AbstractList { public : LinkedList() : pFirst_(0) {}
struct LinkedItem { LinkedItem(Item *pItem=0, LinkedItem *pNext=0) : pData_(pItem), pNext_(pNext) {} Item* pData_; LinkedItem* pNext_; };
Iterator *CreateIterator(); //Iterator를 생성! Factory Method패턴을 이용하여 구현한다! void AddNext(Item *pNewItem, Item *pItem=0); void AddChild(Item *pNewItem, Item *pItem=0); void Remove(Item *pItem); Item* GetItem(int pos);
private : LinkedItem *pFirst_; }; |
'Developer > Design Patterns' 카테고리의 다른 글
C++ Thread 클래스 구현 (0) | 2014.05.17 |
---|---|
함수 포인터 (0) | 2014.05.17 |
정적 멤버 함수와 일반 멤버함수 (0) | 2014.05.17 |
thiscall (0) | 2014.05.17 |
싱글톤 패턴 for Java (0) | 2012.07.04 |