2009년 5월 12일 화요일

EnumerationIterator - Enumeration을 Iterator 형태의 Adapter로서 제공하는 클래스

몇 일동안 Head First Design Pattern을 다시 보고 있는 중이다. 이전에 놓친 부분도 많은 거 같고, 항상 중요한 것을 잊어버릴 수 밖에 없기에 다시한 번 다짐을 해 보고자 읽기 시작했는데, 도움이 많이 된다.

이번에 소개할 패턴은 Adapter Pattern 인데 실제 설명과 내용은 책을 참조하면 된다. Head First Design Patten은 워낙 유명한만큼 좋은 책이니 한 번 씩 읽어보길 바란다.
이 책의 Adapter Pattern에서 제공하는 예제 중에 Enumeation Collection 객체를 Iterator Collection 객체 형태로의 adapter로서 작동할 수 있는 EnumerationIterator 클래스를 제공한다. 이 클래스의 소스 코드와 테스트 할 수 있는 코드를 여기서 제공한다.

실제 업무 상에 Enumeration 객체를 통해서 각각의 Object를 가져오는 경우가 많은데 이를 Iterator를 사용하는 형태로 EnumerationIterator 클래스를 사용하면 가져올 수 있다.

[EnumerationIterator.java]
/**
 * 
 */
package net.wiseant.designpattern.adaptor;

import java.util.Enumeration;
import java.util.Iterator;

/**
 * @author Sang Hyup Lee
 * @version 1.0
 *
 */
public class EnumerationIterator implements Iterator {

    Enumeration enumeration;
    
    public EnumerationIterator(Enumeration enumeration) {
        this.enumeration = enumeration;
    }
    
    /* (non-Javadoc)
     * @see java.util.Iterator#hasNext()
     */
    public boolean hasNext() {
        // TODO Auto-generated method stub
        return this.enumeration.hasMoreElements();
    }

    /* (non-Javadoc)
     * @see java.util.Iterator#next()
     */
    public Object next() {
        // TODO Auto-generated method stub
        return this.enumeration.nextElement();
    }

    /* (non-Javadoc)
     * @see java.util.Iterator#remove()
     */
    public void remove() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException();
    }

}


다음은 위의 코드를 테스트해 볼 수 있는 간단한 Test 코드이다.

/**
 * IteratorAdapterTest.java
 */
package net.wiseant.designpattern.adaptor;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

/**
 * @author Sang Hyup Lee
 * @version 1.0
 *
 */
public class IteratorAdapterTest {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        Vector v = new Vector();
          
        v.addElement(new String("Java"));
        v.addElement(new String("Eclipse"));
        v.addElement(new String("Spring"));
          
        Enumeration enu = v.elements();
        
        /*
        Iterator iter = v.iterator();
        while ( iter.hasNext() ) {
            String temp = ""+iter.next();
            System.out.println(temp);
        }
        */
        
        EnumerationIterator iteratorAdapter = new EnumerationIterator(enu);
        
        while ( iteratorAdapter.hasNext() ) {
            String temp = ""+iteratorAdapter.next();
            System.out.println(temp);
        }
    }
    
}


테스트 코드의 주석부분은 Vector가 Iterator 형태로도 제공해 준다는 것을 명시하고 있다. 하지만 실제 코드의 에제는 Enumeration 형태로 엘리먼트 또는 각 객체를 EnumerationIterator Adapter 클래스를 이용하는 방법을 보여주고 있다.

댓글 없음: