Iterator 패턴

Iterator는 무언가를 반복한다는 의미로 반복자라고 부른다. Iterator패턴이란 복합객체 요소들의 내부 표현방식을 공개하지 않고도 순차적으로 접근할 수 있는 방법을 제공한다.


Iterator는 리스트객체에 접근해서 새로운 내용을 삽입하거나 삭제하거나 순회하는 내용을 Iterator객체에 정의를 한다. 



Iterator의 적용

1. 객체 내부 표현 방식을 모르고도 집합객체의 각 요소를 순회할 수 있다.

2. 집합 객체를 순회하는 다양한 방법을 제시할 수 있다.

3. 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회할 수 있다.


Iterator 예제

IteratorEx.zip


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
Posted by No names
,