Adapter Pattern
서로 다른 인터페이스(API)를 갖는 클래스들을 연결하여 바꿔서 재이용.
상속을 이용한 구현
Adaptee
/**
* 이미 제공되는 API. 개조될 대상.
/*
public class OldVerAPI {
private String str;
public OldVerAPI(String str) {
super();
this.str = str;
}
public void showMessage() {
System.out.println(str);
}
}
Target, Adapter
/**
* 필요한, 변환될 것. Target
*/
public interface NewVerAPI {
void printMessage();
void printVersion();
}
/**
* 필요한, 변환될 것의 구현체. Adapter
*/
public class NewVerAPIImpl extends OldVerAPI implements NewVerAPI {
public NewVerAPIImpl(String str) {
super(str);
}
@Override
public void printMessage() {
showMessage();
}
@Override
public void printVersion() {
System.out.println("v1.0");
}
}
Client
/**
* Target 역할의 Method를 이용하여 수행.
*/
public class Main {
public static void main(String[] args) {
NewVerAPI p = new NewVerAPIImpl("test");
p.printMessage();
p.printVersion();
}
}
//test
//v1.0
위임을 이용한 구현
Target이 Class인 경우. Java나 C#은 다중상속이 되지 않기 때문에 다른 인스턴스의 메소드에 맡김
Target, Adapter
/**
* 필요한, 변환될 것. Target
*/
public interface NewVerAPI {
void printMessage();
void printVersion();
}
/**
* 필요한, 변환될 것의 구현체. Adapter
*/
public class NewVerAPIImpl implements NewVerAPI {
private OldVerAPI oldVerAPI;
public NewVerAPIImpl(String str) {
this.oldVerAPI = new OldVerAPI(str);
}
@Override
public void printMessage() {
oldVerAPI.showMessage();
}
@Override
public void printVersion() {
System.out.println("v1.0");
}
}