-
[Design Pattern] 반복자(Iterator) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:43
Pattern #14 반복자 패턴
자세한 표현방법을 나타내지 않고 객체집합의 요소들을 순차적으로 접근하는데 사용
패턴 요약- 반복을 집합의 요소를 포인트하는 객체 안에 캡슐화 함- 리스트 객체와 방문하는 프로세스 사이의 결합을 줄임동기당신은 기업정보 관리시스템 개발 프로젝트의 책임자로 선발되었다. 이 프로그램 은 크게 user interface, application logic, data management 세 파트로 나뉘는데 이들은 병렬적으로 개발된다. 개발 에 있어 한 가지 문제점 은 application logic 파트와 data management 파트와의 연결 부분이다 . 즉 , data management 파트에서 개발을 맡고 있는 data structure class의 interface 가 확정되지 않은 상황에서 이를 이용한 application logic 구현은 어려운 형편이다. 팀장으로서 이런 상황에서 제시할 당신의 해결책은?
해결방안1: Data Structure Interface를 단일화- 외부에서 사용하는 DS class의 interface를 통일해결방안1 문제점- 다른 DS class로 교체될 때마다 Client code 수정 필요- 자료구조 검색과 상관없더라도 DS class의 interface가 수정될 때 마다 client code 재 컴파일 필요- 자료구조 관리를 위한 기존의 interface와 Client를 위해 단일화된 검색 interface, 두가지가 하나의 DS class로 구현을 하기 때문에 class의 크기가 커지고, 더욱 복잡해진다.해결방안2: 자료구조 검색을 자료구조 Class와 분리- Data Structure class에서 Client가 필요로 하는 자료구조 검색부분을 분리 -Interator class- 각 DS class마다 해당 자료구조의 검색을 위한 Iterator 객체 생성 함수를 구현 - CreateIterator()의도- 동일한 자료형의 객체가 여러 개 모여 있을 때 각 객체들을 순차적으로 접근할 수 있는 방법을 제공한다.- 검색 기능을 자료구조와 분리시켜 객체로 만든다.별칭- Cursor적용범위- 여러 객체들을 모아 관리하는 Aggregate 객체에 대해 내부 구조나 구현에 신경쓰지 않고 저장된객체들을 순차적으로 접근하고자할 때- 동일한 Aggregate 객체에 대해 여러 개의 검색 instance를 가지고자 할 때* Iterator *iter1 = ds->CreateInstance(); 순방향 검색에 사용* Iterator *iter2 = ds->CreateInstance(); 역방향 검색에 사용- 서로 다른 구조를 가긴 Aggregate 객체에 대해 저장된 객체들을 접근하기 위한 interface를 단일화하고자 할 때결과- ConcreteIterator 구현에 따라 다양한 형태의 검색을 지원 할 수 있다.- 반복자는 Aggregate interface를 단순화시킨다.IIterator.java
123456789package iterator;public interface IIterator {public boolean hasNext();public Object next();}cs IContainer.java
1234567package iterator;public interface IContainer {public IIterator createIterator();}cs RecordCollection.java
12345678910111213141516171819202122232425262728293031323334353637package iterator;public class RecordCollection implements IContainer {private String recordArray[] = { "first", "second", "third", "fourth","fifth" };public IIterator createIterator() {RecordIterator iterator = new RecordIterator();return iterator;}private class RecordIterator implements IIterator {private int index;public boolean hasNext() {if (index < recordArray.length) {return true;} else {return false;}}public Object next() {if (this.hasNext()) {return recordArray[index++];} else {return null;}}}}cs IteratorMain.java
12345678910111213package iterator;public class IteratorMain {public static void main(String[] args) {RecordCollection recordCollection = new RecordCollection();IIterator iter = recordCollection.createIterator();while (iter.hasNext()) {System.out.println(iter.next());}}}cs 'CSE > Design Pattern' 카테고리의 다른 글
[Design Pattern] 상태(State) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 옵저버(Observer) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 중재자(Mediator) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 인터프리터(Interpreter) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 플라이웨이트(Flyweight) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 브릿지(Bridge) 패턴 - 디자인 패턴 (0) 2015.06.13