Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
design_pattern:adapter_pattern [2017/10/27 10:19] – [Adapter Pattern] ledyxdesign_pattern:adapter_pattern [2024/02/05 13:16] (current) – [Target, Adapter] ledyx
Line 4: Line 4:
   * '이미 제공된 API'와 '필요한 API' 사이의 '차이'를 없애주는 Design Pattern.   * '이미 제공된 API'와 '필요한 API' 사이의 '차이'를 없애주는 Design Pattern.
     * 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern.     * 기존에 제공된 API를 수정하지 않고 필요한 API에 맞추려는 Design Pattern.
 +      * 구 버전과의 호환성
     * 다른 용도로 감싸기때문에 'Wrapper' Pattern이라고도 불림.     * 다른 용도로 감싸기때문에 'Wrapper' Pattern이라고도 불림.
  
-{{tag>Architecture Modeling DesignPattern Structional}}+{{tag>Architecture Modeling Design_Pattern Structural}}
  
 = 상속을 이용한 구현 = = 상속을 이용한 구현 =
 +== 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);
 + }
 +}
 +</sxh>
 +
 +== Target, Adapter ==
 +<sxh java>
 +/**
 + * 필요한, 변환될 것. Target
 + */
 +public interface NewVerAPI {
 + void printMessage();
 + void printVersion();
 +}
 +</sxh>
 +
 +<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("v1.0");
 + }
 +}
 +</sxh>
 +
 +== Client ==
 +<sxh java>
 +/**
 + * Target 역할의 Method를 이용하여 수행.
 + */
 +public class Main {
 + public static void main(String[] args) {
 + NewVerAPI p = new NewVerAPIImpl("test");
 +
 + p.printMessage();
 + p.printVersion();
 + }
 +}
 +
 +//test
 +//v1.0
 +</sxh>
 +
  
 = 위임을 이용한 구현 = = 위임을 이용한 구현 =
 +Target이 Class인 경우. Java나 C#은 다중상속이 되지 않기 때문에 **다른 인스턴스의 메소드에 맡김**
 +
 +== Target, Adapter ==
 +<sxh java>
 +/**
 + * 필요한, 변환될 것. Target
 + */
 +public interface NewVerAPI {
 + void printMessage();
 + void printVersion();
 +}
 +</sxh>
 +
 +<sxh java ; highlight:[5]>
 +/**
 + * 필요한, 변환될 것의 구현체. 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");
 + }
 +}
 +</sxh>
design_pattern/adapter_pattern.1509095990.txt.gz · Last modified: 2021/02/07 03:15 (external edit)