Iterator Pattern
-collection으로 부터 요소에 대한 빠른 access를 얻기위해 사용하는 순차적인 방법으로 그 객체의 외형에 대해 알필요 없이 사용가능하다.
-behavioral pattern 중의 하나이다.
탐색방법을 설명할 iterator interface를 만든다.
Container interface는 iterator interface를 구현해야한다.
Main 호출 부분.
먼저 container를 구현한 collection에서 iterator 객체를 얻어온다.
그리고 Iterator객체로부터 얻고자 하는 객체를 collection의 element에 맞게 casting하여 사용한다.
NameRepository nameRepository = new NameRepository(); /*Iterator iterator = nameRepository.getIterator(); for (String name = (String)iterator.next(); name!=null; name=(String)iterator.next() ){ Log.d("hello", "name : "+ name); }*/ for (Iterator iterator=nameRepository.getIterator(); iterator.hasNext();) { String name=(String)iterator.next(); Log.d("hello", "name : "+ name); }
Iterator.java
public interface Iterator { public boolean hasNext(); public Object next(); }
Container는 Iterator를 반환할 메소드를 Interface로 만들어준다.
Container.java
public interface Container { public Iterator getIterator(); }
Collection에서 Concrete Iterator를 inner class로 가지며 자신은 Container를 구현한다.
NameRepository.java
public class NameRepository implements Container { public String names[] = {"Robert" , "John" ,"Julie" , "Lora"}; @Override public Iterator getIterator() { return new NameIterator(); } public class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if(index < names.length) return true; return false; } @Override public Object next() { if ( hasNext() ) return names[index++]; return null; } } }
결과 :
07-24 16:32:14.493 7559 7559 D hello : name : Robert
07-24 16:32:14.493 7559 7559 D hello : name : John
07-24 16:32:14.493 7559 7559 D hello : name : Julie
07-24 16:32:14.493 7559 7559 D hello : name : Lora
출처 :
'pattern' 카테고리의 다른 글
Memento pattern (0) | 2018.07.24 |
---|---|
Mediator pattern (0) | 2018.07.24 |
Interpreter pattern (0) | 2018.07.20 |
Command pattern (0) | 2018.07.20 |
Chain of Responsibility Pattern (0) | 2018.07.20 |