Contents
예제)어댑터 패턴(Adapter Pattern)은 서로 호환되지 않는 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 변환해주는 구조적 디자인 패턴입니다. 어댑터 패턴은 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환함으로써, 기존 클래스를 수정하지 않고도 서로 다른 시스템 간의 호환성을 확보할 수 있습니다.


예제)
public class App {
public static void main(String[] args) {
Mouse m1 = new Mouse();
Tiger t1 = new Tiger();
Doorman d1 = new Doorman();
d1.쫓아내(t1);
}
}
public abstract class Animal {
public abstract String getName();
}
public class Mouse extends Animal {
private String name ="쥐";
public String getName() {
return name;
}
}
public class Tiger extends Animal {
private String name ="호랑이";
public String getName() {
return name;
}
}
public class Doorman {
// 쥐 출입금지
public void 쫓아내(Animal m){
System.out.println(m.getName()+"쫓아내");
}
}기존 코드에서 외부 다른 동물들을 추가하여 코드를 추가할 때, 어댑터 패턴을 사용할 수 있다.
public class OuterRabbit {
private String fullname = "토끼";
public String getFullname() {
return fullname;
}
}토끼라는 동물을 추가하면서 Animal을 extends 로 받지 않고 추가하기 위해서 어댑터 역할을 하는 부분이 필요하다.
public class RabbitAdapter extends Animal {
public OuterRabbit rabbit;
public RabbitAdapter(OuterRabbit rabbit) {
this.rabbit = rabbit;
}
@Override
public String getName() {
return rabbit.getFullname();
}
}
public class App {
public static void main(String[] args) {
Mouse m1 = new Mouse();
Tiger t1 = new Tiger();
Doorman d1 = new Doorman();
d1.쫓아내(t1);
RabbitAdapter rabbit = new RabbitAdapter(new OuterRabbit());
d1.쫓아내(rabbit);
}
}다음과 같이 RabbitAdapter를 이용하여 기존 main에서 사용하는 getName을 getFullname과 연결 시켜준다.
Share article