|
반 복 자 |
작성자 : 이선수 |
작설일 : 2011-04-24 | |
주제 : 디자인패턴 |
의도 |
내부 표현부를 노출 하지 않고 어떤 집합객체에 속한 원소들을 순차적으로 접근 할 수 있는 방법 |
활용 |
- 객체 내부 표현 방식을 모르고도 집합 객체의 각 원소들에 접근 할 때. - 집합 객체를 순회하는 다양한 방법을 지원 할 때. - 서로 다른 집합 객체 구조에 대해서 동일한 방법으로 순회 할 때. |
구조 |
|
예제 코드(Aggregate) :Iterator 객체를 생성 하는 인터페이스. |
interface Aggregate { Iterator iterator(); } |
예제 코드 (Iterator) : 원소 접근을 하고 순회하는 인터페이스 |
public interface Iterator { bool hasNext(); Object Next(); } |
예제 코드 (BookShelf) |
public class BookShelf : Aggregate { private Book[] books; private int last = 0;
public BookShelf(int maxSize) { this.books = new Book[maxSize]; } public Book getBookAt(int idx) { return books[idx]; } public void appendBook(Book book) { this.books[last] = book; last++; } public int getLenght() { return last; }
public Iterator iterator() { return new BookShelfIterator(this); } } |
예제 코드 (Book) |
public class Book { private String name; public Book(string _name) { this.name = _name; } public String getName() { return name; } } |
예제 코드 (BookShelfIterator) : 순회 과정 중 집합 객체내에서 현재 위치를 기억. |
public class BookShelfIterator :Iterator { private BookShelf bookshelf; private int idx;
public BookShelfIterator(BookShelf _bookshelf) { this.bookshelf = _bookshelf; this.idx = 0; }
public Object Next() { Book book = bookshelf.getBookAt(idx); idx++; return book; }
public bool hasNext() { if (idx < bookshelf.getLenght()) { return true; } else return false; } } |
예제 코드 (Main) |
public class Program { public static void Main(string[] args) { BookShelf bookshelf = new BookShelf(4); bookshelf.appendBook(new Book("Wpf언리쉬드")); bookshelf.appendBook(new Book("Gof디자인패턴")); bookshelf.appendBook(new Book("ADO.Net")); bookshelf.appendBook(new Book("실버라이트"));
Iterator it= bookshelf.iterator();
while (it.hasNext()) { Book book = (Book)it.Next(); Console.WriteLine(book.getName()); } } } |
실행 화면 |
|
결과 |
- 집합 객체의 다양한 순회 방법을 제공.(구조가 복잡한 집합 객체는 다양한 방법으로 순회 할 수 있다.) - Iterator는 Aggregate 클래스의 인터페이스를 단순화 함(Iterator의 순회 인터페이스는 Aggregate 클래스에 정의한 자신과 비슷한 인터페이스들을 없애서 Aggregate인터페이스를 단순화 할 수 있다.) - 집합 객체에 따라 하나 이상의 순회 하는 방법이 제공 (각 Intertor마다 자신의 순회 상태가 있으므로 하나의 집합 객체를 한번에 여러 번 순회 시킬 수 있다.) |
|