티스토리 뷰
728x90
반응형
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용 가능
- 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용 가능
- 클라이언트와 구현된 인터페이스를 분리
- 인터페이스가 바뀌더라도 변경 내역은 어댑터에서 캡슐화되기 때문에 클라이언트는 바뀔 필요 없음

public interface Duck {
void quack();
void fly();
}
public interface Turkey {
void gobble();
void fly();
}
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("Gobble Gobble");
}
@Override
public void fly() {
System.out.println("flying a short distance");
}
}
public class TurkeyAdapter implements Duck{ //Target 인터페이스를 구현
Turkey turkey; //Adaptee, 객체 구성 사용
public TurkeyAdapter (Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
public class DuckTestDrive {
public static void main(String[] args) {
MallardDuck duck = new MallardDuck();
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey); //Adapter
turkey.gobble();
turkey.fly();
testDuck(duck);
testDuck(turkeyAdapter); //Duck 대신 Turkey로 처리 가능
}
static void testDuck(Duck duck) { //Duck 객체를 받아서 처리하는 메소드
duck.quack();
duck.fly();
}
}
728x90
반응형
'Java > Design Patterns' 카테고리의 다른 글
템플릿 메소드 패턴 (Template Method Pattern) (0) | 2023.05.18 |
---|---|
퍼사드 패턴 (Facade Pattern) (0) | 2023.05.02 |
커맨드 패턴 (Command Pattern) (0) | 2023.04.25 |
싱글턴 패턴 (Singleton Pattern) (0) | 2023.04.17 |
추상 팩토리 패턴 (Abstract Factory Pattern) (0) | 2023.03.17 |
반응형
300x250