서로 다른 인터페이스(API)를 갖는 클래스들을 연결하여 바꿔서 재이용.
/** * 이미 제공되는 API. 개조될 대상. /* public class OldVerAPI { private String str; public OldVerAPI(String str) { super(); this.str = str; } public void showMessage() { System.out.println(str); } }
/** * 필요한, 변환될 것. 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"); } }
/** * 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 */ 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"); } }