Chapter 02 Adapter 바꿔서 재이용하기 - brodieroy/Study GitHub Wiki

1. 무작정 소스를 다운받아서 봅시다. A2, Q2, Sample1, Sample2 가 있더군요.

2. Sample1을 봅시다.

Banner.java

public class Banner {
    private String string;
    public Banner(String string) { //생성자
        this.string = string;
    }
    public void showWithParen() { //str에 )를 추가
        System.out.println("(" + string + ")");
    }
    public void showWithAster() { // str에 *를 추가
        System.out.println("*" + string + "*");
    }
}

Print.java

public interface Print {
    public abstract void printWeak();   //약하게 출력
    public abstract void printStrong(); //강하게 출력
}

PrintBanner.java

public class PrintBanner extends Banner implements Print {
//Banner을 상속했으니 string를 가지고 있으며, Print를 구현했으니 PrintWeak 와 PringString를 구현해야겠죠?
    public PrintBanner(String string) { //기본생성자가 아닌 생성자를 두어 부모의 string를 set하고 있습니다.
        super(string);
    }
    public void printWeak() { //부모의 showWithParen을 호출하는 역할만 하네요?
        showWithParen();
    }
    public void printStrong() { //부모의 showAster을 호출하는 역할만 하네요? 
        showWithAster();
    }
}

3. 이제 이를 사용하는 Main.java(test code)를 봅시다.

Main.java
public class Main {
    public static void main(String[] args) {
        Print p = new PrintBanner("Hello");  //hello를 set하고있습니다.
        p.printWeak();                       // printWeak를 호출하네요 showWithParen을 호출하겠죠?
        p.printStrong();                     //여긴 *를 호출해서 결국 str의 옆에 ( 와 *를 붙일거라는 예상이 듭니다.
    }
//결과는? 
}

###result

(Hello)
*Hello*

여기까지의 그림을 한번 UML로 그려봅시다.

Sample1 UML

여기까지 하고 책을 읽어보니

  • Adapter패턴은 Wrapper패턴으로 불리기도 함.
  • Adapter패턴에는 두가지 종류가 있음 --** 클래스에 의한 Adapter 패턴( 상속을 사용한 Adapter 패턴 )-- ** 인스턴스에 의한 Adapter 패턴 ( 위임을 사용한 Adapter 패턴 )