This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| design_pattern:adapter_pattern [2017/10/27 09:19] – [Adapter Pattern] ledyx | design_pattern:adapter_pattern [2024/02/05 13:16] (current) – [Target, Adapter] ledyx | ||
|---|---|---|---|
| Line 4: | Line 4: | ||
| * ' | * ' | ||
| * 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern. | * 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern. | ||
| + | * 구 버전과의 호환성 | ||
| * 다른 용도로 감싸기때문에 ' | * 다른 용도로 감싸기때문에 ' | ||
| - | {{tag> | + | {{tag> |
| = 상속을 이용한 구현 = | = 상속을 이용한 구현 = | ||
| + | == Adaptee == | ||
| + | <sxh java> | ||
| + | /** | ||
| + | * 이미 제공되는 API. 개조될 대상. | ||
| + | /* | ||
| + | public class OldVerAPI { | ||
| + | private String str; | ||
| + | |||
| + | public OldVerAPI(String str) { | ||
| + | super(); | ||
| + | this.str = str; | ||
| + | } | ||
| + | |||
| + | public void showMessage() { | ||
| + | System.out.println(str); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == Target, Adapter == | ||
| + | <sxh java> | ||
| + | /** | ||
| + | * 필요한, 변환될 것. Target | ||
| + | */ | ||
| + | public interface NewVerAPI { | ||
| + | void printMessage(); | ||
| + | void printVersion(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <sxh java> | ||
| + | /** | ||
| + | * 필요한, 변환될 것의 구현체. 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(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == Client == | ||
| + | <sxh java> | ||
| + | /** | ||
| + | * Target 역할의 Method를 이용하여 수행. | ||
| + | */ | ||
| + | public class Main { | ||
| + | public static void main(String[] args) { | ||
| + | NewVerAPI p = new NewVerAPIImpl(" | ||
| + | |||
| + | p.printMessage(); | ||
| + | p.printVersion(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | //test | ||
| + | //v1.0 | ||
| + | </ | ||
| + | |||
| = 위임을 이용한 구현 = | = 위임을 이용한 구현 = | ||
| + | Target이 Class인 경우. Java나 C#은 다중상속이 되지 않기 때문에 **다른 인스턴스의 메소드에 맡김** | ||
| + | |||
| + | == Target, Adapter == | ||
| + | <sxh java> | ||
| + | /** | ||
| + | * 필요한, 변환될 것. Target | ||
| + | */ | ||
| + | public interface NewVerAPI { | ||
| + | void printMessage(); | ||
| + | void printVersion(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <sxh java ; highlight: | ||
| + | /** | ||
| + | * 필요한, 변환될 것의 구현체. 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(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||