에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 어댑터 패턴
- 호환되지 않는 인터페이스를 클라이언트가 기대하는 인터페이스로 변환해주는 디자인 패턴
- 기존 클래스를 수정하지 않고, 재사용할 수 있게 도와줌
2. 예제: 오리
Duck
예제) 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
예제) Turkey
더보기
public interface Turkey {
void gobble();
void fly();
}
public class WildTurkey implements Turkey {
void gobble() { System.out.println("골골"); }
void fly() { System.out.println("짧은 거리를 날고 있어요!"); }
}
Adapter
- Composition: adaptee 인스턴스가 들어있음
예제) TurkeyAdapter
더보기
public class TurkeyAdapter implements Duck {
private Turkey turkey;
TurkeyAdapter(Turkey turkey) { this.turkey = turkey; }
void quack() { turkey.gobble(); }
void fly() { turkey.fly(); }
}
3. 예시: EnumerationIterator
Enumeration
- 자바의 예전 컬렉션 순회 방식 (HashTable, Stack, Vector)
Iterator
- 현재 컬렉션 프레임워크에서 사용하는 순회 인터페이스
EnumerationIterator (Adapter)
- org.apache.commons.collections.iterators
- 구형 코드로 새로운 인터페이스를 사용하기 위해 어댑터 패턴을 사용
코드
더보기
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(); }
}
'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 |