에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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 |