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로 그려봅시다.
여기까지 하고 책을 읽어보니
- Adapter패턴은 Wrapper패턴으로 불리기도 함.
- Adapter패턴에는 두가지 종류가 있음 --** 클래스에 의한 Adapter 패턴( 상속을 사용한 Adapter 패턴 )-- ** 인스턴스에 의한 Adapter 패턴 ( 위임을 사용한 Adapter 패턴 )