Iterator Pattern
- 컬렉션의 내부구조와 상관없이 그 집합체 안의 모든 항목을 열거하는 패턴
- Java에서는 Iterable<E> / Iterator<E> 라는 인터페이스를 구현하면 사용 가능하다.
- class Node<E> { //Generiec - type argument
- public final E data;
- public final Node<E> next; // Object
- public Node(E data, Node<E> next) { // Object
- this.data = data;
- this.next = next;
- }
- }
- class SList<E> implements Iterable<E> {
- private Node<E> head;
- public SList() {
- head = null;
- }
- public void addFront (E n) {
- head = new Node<E>(n, head);
- }
- public E front() {
- return head.data;
- }
- @Override
- public Iterator<E> iterator() {
- return new SListIterator<E>(head);
- }
- // 외부로 노출되지 않기 위해 private class 로 구현하는게 일반적이다.
- @SuppressWarnings("hiding")
- private class SListIterator<E> implements Iterator<E> {
- private Node<E> current;
- public SListIterator(Node<E> node) {
- this.current = node;
- }
- @Override
- public boolean hasNext() {
- return current != null;
- }
- //현재의 요소를 반환하며 다음으로 이동
- @Override
- public E next() {
- E value = current.data;
- current = current.next;
- return value;
- }
- @Override
- public void remove() {
- // 지원하지 않음
- throw new UnsupportedOperationException("remove() unsupported!");
- }
- }
- }
- public class Ex2 {
- public static void main(String[] args) {
- SList<String> s = new SList<>();
- s.addFront("aaa");
- s.addFront("bbb");
- s.addFront("ccc");
- Iterator<String> iter = s.iterator();
- while(iter.hasNext()) {
- System.out.println(iter.next());
- }
- for(String e : s) { // 내부적으로 iterator 를 사용한다.
- System.out.println(e);
- }
- //Collections, List<T> // interface
- }
- }
'java > design_pattern' 카테고리의 다른 글
Command Pattern - 명령패턴 (0) | 2014.07.01 |
---|---|
Proxy Pattern - 대리자 패턴 (0) | 2014.07.01 |
Visitor Pattern - 방문자 패턴 (0) | 2014.07.01 |
Chain of Responsibility Pattern - 책임의 전가 (0) | 2014.07.01 |
MediatorPattern - 중재자 패턴 (0) | 2014.07.01 |