에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 어댑터
중개
- 어떤 인터페이스를 클라이언트에서 요구하는 인터페이스로 바꿔주는 역할
2. 오리
Duck
public interface Duck {
void quack();
void fly();
}
public class MallardDuck implements Duck {
public void quack() { System.out.println("꽥"); }
public void fly() { System.out.println("날고 있어요!"); }
}
Turkey
public interface Turkey {
void gobble();
void fly();
}
public class WildTurkey implements Turkey {
void gobble() { System.out.println("골골"); }
void fly() { System.out.println("짧은 거리를 날고 있어요!"); }
}
Adapter
public class TurkeyAdapter implements Duck {
private Turkey turkey;
TurkeyAdapter(Turkey turkey) { this.turkey = turkey; }
void quack() { turkey.gobble(); }
void fly() { turkey.fly(); }
}
- Composition
- adaptee 인스턴스가 들어있음
3. 예시
Enumeration
- 컬렉션의 요소들을 순회하기 위한 인터페이스
- 레거시 클래스들에서 사용되었음 (HashTable, Stack, Vector)
Iterator
- 컬렉션의 항목에 접근하고 그 항목을 제거할 수 있게 해주는 인터페이스
EnumerationIterator
public class EnumerationIterator implements Iterator<Object> {
Enumeration<?> enumeration;
public EnumerationIterator(Enumeration<?> enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() { return enumeration.hasMoreElements(); }
public Object next() { return enumeration.nextElement(); }
public void remove() { throw new UnsupportedOperationException(); }
}
- org.apache.commons.collections.iterators
- 구형 코드로 새로운 인터페이스를 사용하기 위해 어댑터 패턴을 사용합니다.
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 8. 템플릿 메서드 패턴 (0) | 2024.12.18 |
---|---|
[헤드퍼스트 디자인 패턴] 7-2. 퍼사드 패턴 (0) | 2024.12.17 |
[헤드퍼스트 디자인 패턴] 6. 커맨드 패턴 (0) | 2024.12.17 |
[헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴 (1) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 4. 팩토리 패턴 (0) | 2024.12.16 |