몇 일동안 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 클래스를 이용하는 방법을 보여주고 있다.
댓글 없음:
댓글 쓰기